可能重复:
C/C++ 宏中的 Do-While 和 if-else 语句
当我们定义宏时,do while(0) 有什么用?
我经常看到这样的代码:
#define foo() do { xxx; yyy; zzz; } while (0)
为什么在这里使用 do-while 包装器?为什么不简单
#define foo() { xxx; yyy; zzz; }
?
编辑:删除分号。
可能重复:
C/C++ 宏中的 Do-While 和 if-else 语句
当我们定义宏时,do while(0) 有什么用?
我经常看到这样的代码:
#define foo() do { xxx; yyy; zzz; } while (0)
为什么在这里使用 do-while 包装器?为什么不简单
#define foo() { xxx; yyy; zzz; }
?
编辑:删除分号。
这是简单的答案。
#define foo() do { xxx; yyy; zzz; } while (0)
#define foo() { xxx; yyy; zzz; }
if (condition)
foo();
else
x++;
当您使用 do-while 版本时,它将正确扩展为:
if (condition)
do { xxx; yyy; zzz; } while (0);
else
x++;
当您使用 {} 版本时,它会扩展为这个,这是一个语法错误(与 不匹配if
)else
。注意第二行中多余的分号。
if (condition3)
{ xxx; yyy; zzz; };
else
x++;