c - 为什么 C 源代码有时会包含 do...while(0) 循环?

标签 c

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/

上一篇:c - tsearch 和 tfind

下一篇:c - 绘制直方图

相关文章:

c - 读取一行直到 C 中的某个字符

c - 如果在 for 循环中创建子进程的 if 语句中有 break,循环是否不再执行?

c++ - 将另一个数组中的随机元素复制到数组中的最快方法 C++

结构数组中的 const C 结构数组

c++ - 使用带有 C 结构的 C++ 模板进行内省(introspection)?

c - 如何确定 C 中复合文字数组中有多少个元素?

c - gcc4.9,禁用包含文件跟踪,来自警告

Rh850 上的 CAN Stack 实现

c - 阻塞模式是什么意思?

c - 商店订购大于原始尺寸的类型 - C 规范