2

可能重复:
C/C++ 宏中的 Do-While 和 if-else 语句
当我们定义宏时,do while(0) 有什么用?

我经常看到这样的代码:

#define foo() do { xxx; yyy; zzz; } while (0)

为什么在这里使用 do-while 包装器?为什么不简单

#define foo() { xxx; yyy; zzz; }

?

编辑:删除分号。

4

1 回答 1

3

这是简单的答案。

#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++;

当您使用 {} 版本时,它会扩展为这个,这是一个语法错误(与 不匹配ifelse注意第二行中多余的分号。

if (condition3)
    { xxx; yyy; zzz; };
else
    x++;
于 2012-12-12T20:09:30.043 回答