在C99标准中,我们就已经可以使用变长参数的宏定义。变长参数的宏定义是啥??就是在宏定义的参数列表的最后一个参数为省略号。而现在C++ 11 中,可以使用预定义宏__VA_ARGS__可以在宏定义的实现部分替换省略号所代表的字符串。
EX:
#include <stdio.h>
//定义LOG宏来记录代码位置中一些信息,程序员可以根据stderr产生的日志追索到代码中产生
//这些记录的位置。引入这样的特性,对于轻量级调试,简单的错误输出都是有积极意义的
#define LOG(...) {\
fprintf(stderr,"%s:line %d:\t",__FILE__,__LINE__);\
fprintf(stderr,__VA_ARGS__);\
fprintf(stderr,"\n");\
}
int main()
{
int x = 3;
LOG("x = %d",x);
}