看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《EdisonX (卡卡獸)》之銘言: ...中間恕刪... : ----- (4) ----- : : 另有時候會用一個 bool ret 當傳回值, : : 一律用 goto (有時候可以不用 goto 是沒錯) 再一起 return 回去。 : : 遇到要處理記憶體的時候,還蠻建議最後再一起 return 回去。 : : bool func() : { : bool ret = true; : int * arr1 = NULL, *arr2 = NULL; : if (! (arr1 = malloc(...)) ) { ret = false ; goto func_end; } : if (! (arr2 = malloc(...)) ) { ret = false ; goto func_end; } : : func_end: : if(arr1) free( (void*)arr1); : if(arr2) free( (void*)arr2); : return ret; : } : : --------------- : : 最後一種大概是最常見的吧,一堆 if-else if-else if... : 中間確信結果或遇到問題的時候就直接 return 回去。 避免用 goto 的話,case (4) 可以改成: bool func() { bool ret = false; int *arr1 = NULL, *arr2 = NULL; while (true) { if (!(arr1 = malloc(...))) break; if (!(arr2 = malloc(...))) break; ret = true; break; } if (!ret) { if (arr1) free((void*)arr1); if (arr2) free((void*)arr2); } return ret; } 以上 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 112.104.146.64
EdisonX:這樣還是無可避免多層 if 套崁問題,還是要回歸上篇推文. 11/06 23:27
EdisonX:然後這寫法我真的覺得和 goto 沒有太大差別,反而比較常看 11/06 23:28
EdisonX:到goto用法 (也可能是我看得不夠多就是了) 11/06 23:28
avhacker:放著簡單安全又快速的 RAII 不用,這是什麼道理? 11/06 23:53
ah7675:c哪來的RAII? 11/10 19:50