【发布时间】:2012-05-30 00:46:19
【问题描述】:
可能重复:
Why are there sometimes meaningless do/while and if/else statements in C/C++ macros?
当需要在预处理宏中执行多条语句时,通常这样写
#define X(a) do { f1(a); f2(a); } while(0)
所以当这个宏在表达式中使用时:
if (...)
X(a);
不会搞砸的。
问题是:无论我在哪里看到这样的表达,总是do { ... } while(0);。有什么理由比if (1) { ... }更喜欢这样的概念(在我看来更清楚)?还是我的观察有误,它们同样受欢迎?
【问题讨论】:
-
#define ever (;;)然后for ever { ... } -
@KingsIndian 您链接到的 Q 询问 为什么 存在这样的陈述。 aland here 想知道为什么一个比另一个更可取,我认为这是一个完全有效的问题,也是不同的问题。
-
@penelope 此外,如果我说 dup,那么它不会马上变成 dup。
At least 4 other people have to agree with me如果社区认为所有 5 位接近投票者都错了,它也可以重新打开。
标签: c c-preprocessor