c - 为什么 (void)0 会停止 "statement has no effect"警告?

标签 c macros

我有一个 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/

相关文章:

c - 使用O_CREAT时open的执行

macros - 宏观规则!宏采用字符串文字 "...",扩展为 "..."和 b"..."

C++ 条件宏评估

objective-c - 多少()宏 objective-c

比较包含括号的宏

C:链表迭代以段错误结束

c - 将 N 个链表节点移到前面 (C)

c - 链表: Reading in txt file,节点不保存

c - 尝试释放内存时出错

c++ - 跟踪宏扩展