在一个宏中编写多个语句是否正确?
#define AB() do { printf("hi"); } while(0)
答案 0 :(得分:1)
是
虽然正确的方法通常是根本没有任何类似功能的宏。
请注意,do-while(0)技巧仅与具有草率大括号样式的代码库相关,例如
if(x)
AB();
else
如果后面有else
语句,do-while(0)技巧将防止由散乱分号引起的编译器错误。如果宏只使用大括号,那么你会得到if(){}; else
语法错误。
请注意,上述支撑样式造成了历史上最昂贵的软件错误之一,称为Apple" goto-fail"错误。因此,有充分的理由永远不会使用它。如果你总是在每个语句后使用{}
,那么do-while(0)技巧也会变得无关紧要。
答案 1 :(得分:0)
是的,这是正确的方法。
理想情况下,您希望宏扩展为单个语句,不 复合语句。你满意的。
您可以在if
,else
块中安全地使用此宏。