可能重复:
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__;
我怀疑这与线程安全有关,但我不确定。
答案 0 :(得分:2)
这样做是为了你可以在宏中使用它,同时要求宏用户在末尾使用分号,就像常规语句一样。
换句话说,只要你想在类似函数的宏FOO(...)
中使用多个语句,就可以用do { ... } while (0)
包装它,这样宏的用户就可以了(和事实上,必须)将其称为FOO(x);
,而不仅仅是FOO(x)
(对于人类和计算机而言,分号的缺失可能很奇怪)。
答案 1 :(得分:0)
你看到这些代码主要在宏中,它们的行为就像它们的功能一样 #define无论做什么.....而(0)
你就像使用它一样 无论();
我看到这个问题之前已经回答了 do { ... } while (0) — what is it good for?
更正了链接,谢谢符文。