发件人:tstyles@my-dejanews.com
新闻组:comp.lang.c
主题:Re: 宏与可变数量的参数?
日期:1999年3月22日星期一 08:24:26 GMT
消息ID:<7d4unk$2rc$1@nnrp1.dejanews.com>

在文章 <SouthSide-2003990057220001@bns.vip.best.com> 中,
SouthSide@kagi.com (Bob Bradley) 写道
> 是否可以创建一个带有可变数量参数的宏?我
> 想创建一个调试宏,它接受一个可变数量的
> 参数来调用一个类似 printf 的例程,但当预处理器标志关闭时,
> 我希望它能完全消除函数调用。例如
>
> #if( DEBUG )
> #define DebugMacro( ... ) printf( ... )
> #else
> #define DebugMacro( ... )
> #endif

#if( DEBUG )
   #define  DebugMacro(Fmt_and_Args)    printf(Fmt_and_Args)
   #define  Arg(X)                      , (X)
#else
   #define  DebugMacro(Fmt_and_Args)
   #define  Arg(X)
#endif

用法

   DebugMacro("Index %d, value %f"Arg(i)Arg(value));
这允许您插入“隐藏”参数,例如
#if( DEBUG )
   #define  DebugMacro(Fmt_and_Args) fprintf(stderr,Fmt_and_Args)
甚至,
#if( DEBUG )
   #define  DebugMacro(Fmt_and_Args) dbgprintf(__FILE__,__LINE__,Fmt_and_Args)
Tristan Styles #1485

失败不是一个选项
这是标准操作程序