GCC可变参数宏逗号的解决办法

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

完美解决!

 

转载于:https://www.cnblogs.com/Xiao_bird/archive/2009/12/04/1616830.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值