在一些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; }