84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
认证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等解決問題