do......while(false)
阿新 • • 發佈:2018-11-02
tin ng- con ear clear tis com bar 多級
個人分類: 設計C/C++
今天看代碼時發現個不太理解的風格,一些代碼都分段包含在了do{...}while(false)區間裏。一般來說,使用do while是為了循環,但這裏循環條件是false,根本就不會有循環,那麽意義何在?
上網查了下後得到結論:使用do{...}while(false)結構可以簡化多級判斷時代碼的嵌套。
舉個例子:現在要實現一個功能,但需要A、B、C、D四個前提條件,並且這四個前提條件都存在上級依賴,即B依賴於A,C依賴於A和B,D依賴於A、B和C。如果按照一般的寫法,是這樣:
-
if( A==true )
- {
- if( B==true )
- {
- if( C==true )
- {
- if( D==true )
- {
- //實現功能代碼
- }
- }
- }
- }
一種解決的辦法是使用goto語句,當某個條件不成立時,直接跳轉到之後的語句段,形如這樣:
- if( A==false )
- goto tag;
- if( B==false )
- goto tag;
-
if( C==false )
- goto tag;
- if( D==false )
- goto tag;
- //實現功能代碼
- tag:
- ...
其實使用do while語句也可以實現類似goto的功能,但代碼可讀性會比goto風格好很多。代碼如下:
- do
- {
- if( A==false )
- break;
- if( B==false )
- break;
-
if( C==false )
- break;
- if( D==false )
- break;
- //實現功能代碼
- }while(false);
- ...
do......while(false)