Re: [問題] 請問non-void函數return哪一種寫法比較好?

看板C_and_CPP作者 (())時間10年前 (2013/11/06 22:52), 編輯推噓0(005)
留言5則, 3人參與, 最新討論串3/3 (看更多)
※ 引述《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

11/06 23:27, , 1F
這樣還是無可避免多層 if 套崁問題,還是要回歸上篇推文.
11/06 23:27, 1F

11/06 23:28, , 2F
然後這寫法我真的覺得和 goto 沒有太大差別,反而比較常看
11/06 23:28, 2F

11/06 23:28, , 3F
到goto用法 (也可能是我看得不夠多就是了)
11/06 23:28, 3F

11/06 23:53, , 4F
放著簡單安全又快速的 RAII 不用,這是什麼道理?
11/06 23:53, 4F

11/10 19:50, , 5F
c哪來的RAII?
11/10 19:50, 5F
文章代碼(AID): #1IUbUIjE (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1IUbUIjE (C_and_CPP)