2016-09-30 79 views
0

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

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

宏只是文本替换。我不认为这个问题是有道理的。您通常不会在宏中有*,因为宏不是一个语法单位。 –

+0

现在取决于你想如何使用宏 –

+0

这个宏的优点是可以将函数调用写成函数调用,即'AB();' –

回答

0

是的这是正确的方法。

理想情况下你想要的宏扩展到一个单一声明一个复合声明。你的满足。

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

1

是的。

虽然正确的方法是最经常没有任何类似功能的宏。

请注意,DO-而(0)诀窍是仅与马虎括号风格的代码库有关,如

if(x) 
    AB(); 
else 

的DO-而(0)技巧将防止由于编译器错误流浪的分号,如果有以下else声明。如果宏只使用大括号,你会得到if(){}; else这是一个语法错误。

请注意,上述支架样式导致了历史上最昂贵的软件错误之一,称为Apple“goto-fail”错误。所以有很好的理由永远不要使用它。如果在每个语句后总是使用{},则do-while(0)技巧也变得无关紧要。