PHPz2017-04-17 14:59:03
當效果大於可能的對結構的破壞時.(goto 本身無錯,不過人力有窮盡,大多時候添加goto反而會造成一些額外的麻煩)
個人學習中接觸到的goto也就用於跳出n層循環.
大家讲道理2017-04-17 14:59:03
看過的源碼裡比較愛用goto的是OpenSSL,因為是純C寫的,又有大量malloc出來的複雜資料結構,所以一個函數退出時必須要進行清理,而且就算是錯誤中斷了流程,也要清理,所以用了goto跳到清理的位置,確保函數只有一個出口。
C++因為有類別物件的析構函式可以執行清理,加上C++11加入的智慧型指標可以用來自動釋放new出來的東西,已經基本上不需要這樣。很多語言都保留了goto,但不建議用。
其實C/C++可以用這種方式代替goto:
do{
if (...)
break;
} while(0);
cleanup();