档案

Archive for the ‘C/C++’ Category

宏的可变参数

12月 15, 2011 留下评论

C语言函数中的可变参数通过va_list和va_arg实现,利用了函数调用过程中,参数采用栈进行传递的方法。 比如

void debug_print(char *format, ...)
{
  va_list args;
  va_begin(args, format);
  vaprintf(format, args);
  va_end(args);
}

在宏定义里面同样可以使用可变参数__VA_ARGS__ (C99)

#define DEBUG_PRINT(...)  fprintf(stdout, __VA_ARGS__);

或者采用gcc扩展的方法:

#define DEBUG_PRINT(fmt, args...) fprintf(stdout, fmt, ##args)
分类:C/C++