可能是重复问题:
为什么 C/C++ 宏中有时会有无意义的 do/while 和 if/else 语句?
当需要在预处理器宏中执行多个语句时,通常会这样写:
#define X(a) do { f1(a); f2(a); } while(0)
因此,当此宏在像下面这样的表达式中使用时:
if (...)
X(a);
不会出错。
问题是:我在哪里看到这样的表达式时,总是使用 do { ... } while(0);
。有没有理由更喜欢这种方式而不是(在我看来更清晰的)if (1) { ... }
?或者我的观察有误,它们同样受欢迎?
#define ever (;;)
的意思是定义一个常量ever
,其值为一个空语句;
。然后可以使用for ever { ... }
的形式来创建一个无限循环。 - Vinicius Kamakura至少还需要4个人同意
,而且如果社区认为所有5个关闭投票者都错了,它可以重新打开。 - P.P