【发布时间】:2010-09-20 10:07:20
【问题描述】:
可能重复:
Why are there sometimes meaningless do/while and if/else statements in C/C++ macros?
我已经看到这种表达方式 10 多年了。我一直在想它有什么好处。由于我主要在#defines 中看到它,我认为它适用于内部范围变量声明和使用中断(而不是 goto)。
它对其他东西有好处吗?你会用吗?
【问题讨论】:
-
实际上,它不是重复的,因为链接的 q/a 没有具体定义。比较两个答案很容易说明它不是重复的。
-
参见 Redis 第 53 行的“decrement_used_memory” [link]github.com/antirez/redis-tools/blob/master/zmalloc.c
-
重复的问题是标记为可能重复的问题(帖子的第一行),而不是 Federico A. Ramponi 给出的问题。
-
此
do { ... } while ((void)0, 0)的其他变体用于消除有关“恒定条件”的编译器警告。