1. 程式人生 > 其它 >為何會有do{ ... }while(false)這種寫法

為何會有do{ ... }while(false)這種寫法

參考 https://blog.csdn.net/this_capslock/article/details/41843371

今天看程式碼時發現個不太理解的風格,一些程式碼都分段包含在了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 )
{
//實現功能程式碼
}
}
}
}
可能看出來,這樣導致多層if語句巢狀,看起來邏輯很不清晰。
一種解決的辦法是使用goto語句,當某個條件不成立時,直接跳轉到之後的語句段,形如這樣:


if( A==false )
goto tag;
if( B==false )
goto tag;
if( C==false )
goto tag;
if( D==false )
goto tag;
//實現功能程式碼

tag:
...
這樣看起來風格是好多了,但使用goto語句會有很多隱患,一般是不建議用的。
其實使用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)中的程式碼段,可以用break的方式實現類似goto的跳轉功能,在實際工程中很有使用價值。

//