我有一个trace()宏我用另一个宏打开和关闭,例如
#ifdef TRACE
#define trace(x) trace_val(x, 0)
#else
#define trace(x) 0
#endif
Run Code Online (Sandbox Code Playgroud)
warning: statement with no effect当我trace()用TRACEundefined 调用时,这是从gcc 生成的.经过一番搜索,我发现了变化
#define trace(x) 0
Run Code Online (Sandbox Code Playgroud)
至
#define trace(x) (void)0
Run Code Online (Sandbox Code Playgroud)
沉默错误.我的问题是:为什么?有什么不同?
警告和解决方法是特定于编译器的.你可以做的是以下内容:
#define NOP do { } while(0)
#ifdef ENABLE_TRACE
#define TRACE(x) trace_val(x, 0)
#else
#define TRACE(x) NOP
#endif
Run Code Online (Sandbox Code Playgroud)
这首先避免了潜在的问题.