宏定義中的do{...}while(0)

do while(0)不是循環,只執行一遍!他的目的和直接加大括號一樣。用while只不過是使這個宏可以用於if等分支裏。他顯然比{}要好用了,它可以break,但是{}不可以。所以說和{}一樣倒真的錯了

注意在宏定義中,while(0)後面不加分號。

此用法的功能:

1.取代{},宏展開時不至於出錯,特別是在含多條語句的宏裏面用得比較多,涉及分號的問題;

如果使用大括號{}:


#define DO_SOMETHING {int time = 100 ;make_love(i);}

if(you->strong())DO_SOMETHING;
else ..;

則展開是這樣的:

if(you->strong())
{int time = 100 ;make_love(i);}
;
else ..;

如果使用do{...}while(0)就不會出錯。

#define DO_SOMETHING do{int time = 100 ;make_love(i);} while(0)

if(you->strong())
do{int time = 100 ;make_love(i);}
while(0);
else ..;

2.爲break服務,避免使用GOTO,用BREAK做跳出.

當你執行一段代碼到一半,想跳過剩下的一半的時候,如果你正處於do while循環中,則能用break達到這個目的。break的作用是跳出當前循環體。


參考:http://bbs.csdn.net/topics/390361821  後續繼續補充




發佈了53 篇原創文章 · 獲贊 9 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章