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

10-11 15:45