1. 程式人生 > >do......while(false)

do......while(false)

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。如果按照一般的寫法,是這樣:

  1. if( A==true )
  2. {
  3. if( B==true )
  4. {
  5. if( C==true )
  6. {
  7. if( D==true )
  8. {
  9. //實現功能代碼
  10. }
  11. }
  12. }
  13. }
可能看出來,這樣導致多層if語句嵌套,看起來邏輯很不清晰。

一種解決的辦法是使用goto語句,當某個條件不成立時,直接跳轉到之後的語句段,形如這樣:

  1. if( A==false )
  2. goto tag;
  3. if( B==false )
  4. goto tag;
  5. if( C==false )
  6. goto tag;
  7. if( D==false )
  8. goto tag;
  9. //實現功能代碼
  10. tag:
  11. ...
這樣看起來風格是好多了,但使用goto語句會有很多隱患,一般是不建議用的。

其實使用do while語句也可以實現類似goto的功能,但代碼可讀性會比goto風格好很多。代碼如下:

  1. do
  2. {
  3. if( A==false )
  4. break;
  5. if( B==false )
  6. break;
  7. if( C==false )
  8. break;
  9. if( D==false )
  10. break;
  11. //實現功能代碼
  12. }while(false);
  13. ...
這樣就可以明白了:在do{...}while(false)中的代碼段,可以用break的方式實現類似goto的跳轉功能,在實際工程中很有使用價值。

do......while(false)