我一直在尝试在C中实现一个函数宏,该宏在参数前加上“DEBUG:”,并将其参数传递给printf:
#define DBG(format, ...) printf("DEBUG: " #format "\n", __VA_ARGS__)
这给了我gcc中的这个错误:
src/include/debug.h:4:70: error: expected expression before ‘)’ token
#define DBG(format, ...) printf("DEBUG: " #format "\n", __VA_ARGS__)
^
据说,它应该将格式字符串化,并将其可变参数传递给printf,但是到目前为止,我无法克服此错误。
编辑
在放弃了字符串化参数和双哈希(
##
)__VA_ARGS__
之后,我现在遇到了这个错误:src/lib/cmdlineutils.c: In function ‘version’:
src/lib/cmdlineutils.c:56:17: warning: ISO C99 requires rest arguments to be used [enabled by default]
DBG("version()");
我应该在逗号后面加上逗号吗?
DBG("version()",); // ?
作为引用,DBG()现在看起来像这样:
#define DBG(format, ...) printf("DEBUG: " format "\n", ##__VA_ARGS__)
最佳答案
除非至少有一个可变参数,否则这种情况发生在。您可以尝试使用以下GNU扩展程序对其进行修复:#define DBG(format, ...) printf("DEBUG: " #format "\n", ##__VA_ARGS__)
^^
如in the GNU doc所述:
关于c - 使用__VA_ARGS__定义字符串化宏时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18968070/