一个宏中的多个语句

时间:2016-09-30 09:56:11

标签: c macros

在一个宏中编写多个语句是否正确?

 #define AB() do { printf("hi"); } while(0)

2 个答案:

答案 0 :(得分:1)

虽然正确的方法通常是根本没有任何类似功能的宏。

请注意,do-while(0)技巧仅与具有草率大括号样式的代码库相关,例如

if(x)
  AB();
else

如果后面有else语句,do-while(0)技巧将防止由散乱分号引起的编译器错误。如果宏只使用大括号,那么你会得到if(){}; else语法错误。

请注意,上述支撑样式造成了历史上最昂贵的软件错误之一,称为Apple" goto-fail"错误。因此,有充分的理由永远不会使用它。如果你总是在每个语句后使用{},那么do-while(0)技巧也会变得无关紧要。

答案 1 :(得分:0)

是的,这是正确的方法。

理想情况下,您希望宏扩展为单个语句, 复合语句。你满意的。

您可以在ifelse块中安全地使用此宏。