在一些Linux內核和其它的開源代碼中,我們經常看到像下面這樣的代碼:
do{
...
}while(0)
該代碼片段並非循環,這樣想想似乎使用do…while沒有任何意義,那麼為什麼還要使用它呢?
實際上,do{...}while(0)的用途並不僅僅是優化你的代碼。經過一系列的調研和探索,我們總結出它的一些用途如下。
1. 幫助定義復雜的宏以避免錯誤
詳細解釋請看“do {...} while (0) 在宏定義中的作用”,講述了如何利用do {...} while (0) 解決常犯的宏定義錯誤,讓大家不再懼怕宏。
2. 避免使用goto控制程序流
在一些函數中,我們在return語句之前可能需要做一些工作,比如釋放在函數一開始由malloc函數申請的內存空間,使用goto總是一種簡單的方法:
int foo()
{
somestruct* ptr = malloc(...);
dosomething...;
if(error)
{
goto END;
}
dosomething...;
if(error)
{
goto END;
}
dosomething...;
END:
free(ptr);
return 0;
}