Possible Duplicate:
Why are there sometimes meaningless do/while and if/else statements in C/C++ macros?
为什么我遇到的 C 源代码有时会用 do...while(0)
包裹起来循环?
do {
parser->http_errno = e;
parser->error_lineno = __LINE__;
} while (0)
为什么使用那个,而不是这个:
parser->http_errno = e;
parser->error_lineno = __LINE__;
我怀疑这与线程安全有关,但我不确定。
最佳答案
这样做是为了您可以在宏内部使用它,同时要求宏用户在末尾使用分号,就像常规语句一样。
换句话说,每当您想要在类似函数的宏 FOO(...)
中使用多个语句时,您可以用 do { .. . } while (0)
以便宏的用户可以(事实上,必须)将其调用为 FOO(x);
,而不是简单的 FOO(x)
(缺少分号对于人类和计算机来说都可能很奇怪)。
关于c - 为什么 C 源代码有时会包含 do...while(0) 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10117502/