c – 如何优雅地修复这个未使用的变量警告?
发布时间:2020-12-16 03:23:52 所属栏目:百科 来源:网络整理
导读:我正在研究一些在设置DEBUG标志时执行大量错误报告和日志记录的C代码,这有时会在未设置DEBUG标志的情况下生成未使用的变量警告. #ifdef DEBUG#define CHECK(expr) foo(expr)#else#define CHECK(expr)#endif /* DEBUG */int x = bar(a,b,c); /* bar has to be
我正在研究一些在设置DEBUG标志时执行大量错误报告和日志记录的C代码,这有时会在未设置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,c); #else bar(a,c); #endif CHECK(x == SOME_VALUE); 然后,避免将调用写入bar(在实际调用中更复杂)两次: #ifdef DEBUG int x = #endif bar(a,c); CHECK(x == SOME_VALUE); 但是,我觉得这不是一个干净,可读的解决方案.有没有更好的办法?请注意,出于性能原因,如果未定义DEBUG,则CHECK(expr)宏不应生成任何代码(编辑:因此,不应评估expr). 有没有比我上面概述的方式更优雅的方式? 解决方法#ifdef DEBUG #define CHECK(x) x #else #define CHECK(x) ((void)sizeof((void)(x),0)) #endif 我认为这解决了所有可能的问题: > sizeof确保表达式根本不被评估,因此它的副作用不会发生.这与仅调试构造的常见行为一致,例如 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |