2016-09-30 84 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)技巧也變得無關緊要。