注意在宏定義中,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 後續繼續補充