作者tomnelson (())
看板C_and_CPP
標題Re: [問題] 請問non-void函數return哪一種寫法比較好?
時間Wed Nov 6 22:51:59 2013
※ 引述《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