我一直在尝试在 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__)