我有一个 trace()
宏,我用另一个宏打开和关闭,例如
#ifdef TRACE
#define trace(x) trace_val(x, 0)
#else
#define trace(x) 0
#endif
当我在 TRACE
未定义的情况下调用 trace()
时,这会从 gcc 生成 warning: statement with no effect
。经过一番搜索,我发现改变
#define trace(x) 0
到
#define trace(x) (void)0
消除错误。我的问题是:为什么?有什么区别?
最佳答案
转换为 void 表明程序员打算丢弃结果。警告的目的是表明该语句没有效果并不明显,因此提醒程序员注意以防万一它是无意的。此处的警告没有任何意义。
关于c - 为什么 (void)0 会停止 "statement has no effect"警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10022239/