很多書籍都會把“”goto“”當成反面教材使用,認為如果使用不當,將會造成很多意想不到的問題。但goto作為C語言的一部分,存在即合理,goto有它的缺點,也有它的優點。 缺點:
很容易把邏輯弄亂,增加理解難度,goto是可以實現無條件跳轉的,一旦跳轉,就忽略很前面很多代碼,特別是在一些邏輯復雜的地方使用,會很容易出問題。所以goto能不用就不用,特別對于新手,盡量避諱。
優點:
方便處理異常情況,特別是內存等系統資源的釋放。很多大型項目,開源項目,包括Linux內核,都會使用goto來處理異常情況。 舉個例子,以下情況,大家第一反應是沒有問題,其實是存在內存泄漏隱患的。如果變量pdate2申請失敗,則退出函數。那么問題來了, pdate 申請成功了,但沒有得到釋放,出現了內存泄漏。所以這種情況如果使用goto,就很容易解決問題。
int module_init(){ char *pdate = (char *)malloc(100); if(pdate == NULL) return -1; char *pdate2 = (char *)malloc(100); if(pdate2 == NULL) return -1; free(pdate); free(pdate2); ......}
goto實現代碼
int module_init(){ char *pdate = (char *)malloc(100); if(pdate == NULL) goto err; char *pdate2 = (char *)malloc(100); if(pdate2 == NULL) goto err; free(pdate); free(pdate2); ...... err://統一的出錯處理 if(pdate != NULL) free(pdate); if(pdate2!= NULL) free(pdate2);return-1;}另一種寫法就是分階段處理:
if(pdate == NULL)gotoerr1;...if(pdate2==NULL) goto err2; ...err1: free(pdate);err2: free(pdate2);...
總結:存在即合理,好壞取決于如何使用。
-END-
來源 | 二進制人生
原文標題:goto語句對與錯
文章出處:【微信公眾號:嵌入式ARM】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
源代碼
+關注
關注
96文章
2946瀏覽量
66805
原文標題:goto語句對與錯
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論