2.1.4 变长参数的宏定义以及VA_ARGS
在C99标准中,程序员可以使用变长参数的宏定义。变长参数的宏定义是指在宏定义中参数列表的最后一个参数为省略号,而预定义宏VA_ARGS则可以在宏定义的实现部分替换省略号所代表的字符串。比如:
define PR(…)printf(VA_ARGS)
就可以定义一个printf的别名PR。事实上,变长参数宏与printf是一对好搭档。我们可以看如代码清单2-4所示的一个简单的变长参数宏的应用。
代码清单2-4
include <stdio.h>
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);//2-1-5.cpp:Line 12:x=3
}
//编译选项:g++ -std=c++11 2-1-5.cpp
在代码清单2-4中,定义LOG宏用于记录代码位置中一些信息。程序员可以根据stderr产生的日志追溯到代码中产生这些记录的位置。引入这样的特性,对于轻量级调试,简单的错误输出都是具有积极意义的。