使用GCC在编译可变参数宏的过程中,如果调用宏时没有提供可变参数,那么在编译的时候GCC会报错。比如:
#define debug(fmt,args...) vprintf(fmt,args)
调用宏:
debug("output text\n");
此时GCC编译会报错,使用GCC -E选项查看预编译过程产生出来的文件,找到该行宏调用处,被展开为:
vprintf("output text\n",);
可以看到在中多了一个“逗号”
解决办法:
使用另一个宏定义方式:
#define debug(fmt,...) vprintf(fmt,## __VA_ARGS )
再次调用宏:
debug("output text\n");
查看预编译结果:
vprintf("output text\n");
完美解决!