认证0级讲师
終於見到這個令人興奮的問題了. 專程為你寫了一篇博文.分享一下本人的goto歷程;How to use goto?
當效果大於可能的對結構的破壞時.(goto 本身無錯,不過人力有窮盡,大多時候添加goto反而會造成一些額外的麻煩)個人學習中接觸到的goto也就用於跳出n層循環.
盡量不要用goto…程式碼是給人看的,任何影響閱讀的程式碼都不要寫出來…
看過的源碼裡比較愛用goto的是OpenSSL,因為是純C寫的,又有大量malloc出來的複雜資料結構,所以一個函數退出時必須要進行清理,而且就算是錯誤中斷了流程,也要清理,所以用了goto跳到清理的位置,確保函數只有一個出口。 C++因為有類別物件的析構函式可以執行清理,加上C++11加入的智慧型指標可以用來自動釋放new出來的東西,已經基本上不需要這樣。很多語言都保留了goto,但不建議用。 其實C/C++可以用這種方式代替goto:
do{ if (...) break; } while(0); cleanup();
C的話,函數內隨便用,沒啥的,C++的話不要用,有try catch等解決問題
終於見到這個令人興奮的問題了. 專程為你寫了一篇博文.分享一下本人的goto歷程;
How to use goto?
當效果大於可能的對結構的破壞時.(goto 本身無錯,不過人力有窮盡,大多時候添加goto反而會造成一些額外的麻煩)
個人學習中接觸到的goto也就用於跳出n層循環.
盡量不要用goto…程式碼是給人看的,任何影響閱讀的程式碼都不要寫出來…
看過的源碼裡比較愛用goto的是OpenSSL,因為是純C寫的,又有大量malloc出來的複雜資料結構,所以一個函數退出時必須要進行清理,而且就算是錯誤中斷了流程,也要清理,所以用了goto跳到清理的位置,確保函數只有一個出口。
C++因為有類別物件的析構函式可以執行清理,加上C++11加入的智慧型指標可以用來自動釋放new出來的東西,已經基本上不需要這樣。很多語言都保留了goto,但不建議用。
其實C/C++可以用這種方式代替goto:
C的話,函數內隨便用,沒啥的,C++的話不要用,有try catch等解決問題