Xiao_bird博客

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

使用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");

完美解决!

 

posted on 2009-12-04 11:27  Xiao_bird  阅读(3031)  评论(1编辑  收藏  举报