我正在编写一些 C 代码,这些代码在设置标志时会执行大量错误报告和日志记录DEBUG
,这有时会在未设置标志的情况下编译时产生未使用的变量警告DEBUG
。
#ifdef DEBUG
#define CHECK(expr) foo(expr)
#else
#define CHECK(expr)
#endif /* DEBUG */
int x = bar(a, b, c); /* bar has to be called for both DEBUG begin defined and undefined */
CHECK(x == SOME_VALUE); /* Produces an "unused variable" warning if DEBUG is undefined
编辑:只是一点提醒(不确定它是否有任何后果):CHECK
宏的参数是一个表达式,而不是单个变量。
对于这种模式,摆脱未使用的变量警告的最佳方法是什么?
我尝试过/虽然:
#ifdef DEBUG
int x = bar(a, b, c);
#else
bar(a, b, c);
#endif
CHECK(x == SOME_VALUE);
然后,为了避免将调用写入bar
(在实际调用中更复杂)两次:
#ifdef DEBUG
int x =
#endif
bar(a, b, c);
CHECK(x == SOME_VALUE);
但是,我觉得这不是一个干净易读的解决方案。有没有更好的办法?请注意,出于性能原因,如果未定义,CHECK(expr)
宏不应生成任何代码(编辑:因此不应评估)。DEBUG
expr
有没有比我上面概述的更优雅的方法?