作者EdisonX (卡卡獸)
看板C_and_CPP
標題Re: [問題] 請問non-void函數return哪一種寫法比較好?
時間Wed Nov 6 01:03:22 2013
※ 引述《Zcode (Zcode)》之銘言:
----- (1) -----
bool isLarger(int a, int b) {
if (a > b)
return true;
else
return false;
}
這寫法蠻多 compiler 會噴 warning , 遇到這情形我會故意在最後一行,
加一個無義的 return true; 去消 warning
----- (2) -----
bool isLarger(int a, int b) {
if (a > b)
return true;
return false
}
其實我比較常用這個。
----- (3) -----
然後蠻多網友說用
return (a>b); 一開始也習慣盡可能寫短 (短到有點噁心那種),
不過發現這樣不好 debug, 所以寧願多設一個變數做觀查。
bool isLarger(int a, int b) {
bool ret = (a>b) ; ///< 斷點下在這裡還可以觀查結果 , 直接 return 就沒了..
return ret;
}
----- (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 回去。
--
就算把新鮮的肝拿回去,還是一樣寫碼到禿頭,加班到天亮,
永遠當老闆的傀儡 你是不是想這麼做?
是的話你就拿回去~ 拿啊!!
九世宅男 : 下輩子不要再讓我幹工程師了 ~
< Kuso 星爺語錄 >
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 101.15.129.78
→ diabloevagto:你第四種可以考慮用try catch將ret丟出來 11/06 01:06
→ azureblaze:把不是exception的東西當exception效能會很糟喔 11/06 01:18
→ uranusjr:最後一個我會拆成兩層 function, 用 goto 寫如果其他人搞 11/06 01:35
→ uranusjr:不清楚狀況多改出個 return 就慘了 11/06 01:36
推 littleshan:4.請用 RAII,因為你的 if block 裡面可能也會配置資源 11/06 02:28
→ littleshan:這種情況若還用 goto 會崩潰的 11/06 02:29
→ EdisonX:嗯,是該用 RAII 沒錯... 11/06 23:25
→ AnyaAlstreim:C++ 用 RAII, 那請問 C 語言該如何處理? 11/07 04:49
→ tomnelson:樓上請看我回文那邊,雖說那篇推文被人說為啥不用RAII,但 11/07 23:09
→ tomnelson:其實回文裡程式會這麼寫就是純C的寫法呀! 11/07 23:10
→ AnyaAlstreim:是阿... 所以我很納悶... 11/08 01:04
推 littleshan:C 沒有好的解法,所以別再用純 C 了 (無誤 11/12 13:14
→ littleshan:這個討論串原po就指明了C++,所以用RAII是很合理的 11/12 13:14