关于c:C宏定义中使用可变参数

宏定义中应用可变参数
C99 减少了宏定义中应用可变参数的反对。
用法为在定义中通过’…’定义可变参数,前面通过__VA_ARGS__援用。
如上面定义DGB宏,在log中主动减少’DEBUG’。

#define DBG(format, ...) printf("DEBUG: " #format "\n", ##__VA_ARGS__)

宏应用例

DBG("%d - %s", a,b);

问题
如下不指定参数应用,则会编译失败

DBG("hahaha");
: error: expected expression before ‘)’ token
#define DBG(format, ...) printf("DEBUG: " #format "\n", __VA_ARGS__)
                                                                   ^

解决办法

#define DBG(format, ...) printf("DEBUG: " #format "\n", ##__VA_ARGS__)
                                                        ^^

参考

https://stackoverflow.com/que…
http://gcc.gnu.org/onlinedocs…

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理