仅当它是调试版本时,我才尝试打印消息。所以我写了下面的代码:
#ifdef MY_DEBUG
#define dbg_printf fprintf
#else
#define dbg_printf
#endif
dbg_printf(stderr, "item: %s\n", config[i]);
Run Code Online (Sandbox Code Playgroud)
当未定义 MY_DEBUG 时,我收到以下消息:
main.c:xxx:xxx: warning: left-hand operand of comma expression has no effect [-Wunused-value]
dbg_printf(stderr, "item: %s\n", config[i]);
Run Code Online (Sandbox Code Playgroud)
我试图避免该消息,但我应该添加-Wunused-value到 CFLAGS 吗?最佳做法是什么?
您的宏在扩展为空时会留下参数列表,该列表将成为一个搁浅的逗号表达式。通常的解决方案是在宏中匹配并转发参数列表,并在禁用时将其全部替换为 noop 语句。
#ifdef MY_DEBUG
#define dbg_printf(...) fprintf(__VA_ARGS__)
#else
#define dbg_printf(...) (0)
#endif
Run Code Online (Sandbox Code Playgroud)