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

看板C_and_CPP作者 (卡卡獸)時間11年前 (2013/11/05 17:03), 編輯推噓2(2011)
留言13則, 7人參與, 最新討論串2/3 (看更多)
※ 引述《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

11/06 01:06, , 1F
你第四種可以考慮用try catch將ret丟出來
11/06 01:06, 1F

11/06 01:18, , 2F
把不是exception的東西當exception效能會很糟喔
11/06 01:18, 2F

11/06 01:35, , 3F
最後一個我會拆成兩層 function, 用 goto 寫如果其他人搞
11/06 01:35, 3F

11/06 01:36, , 4F
不清楚狀況多改出個 return 就慘了
11/06 01:36, 4F

11/06 02:28, , 5F
4.請用 RAII,因為你的 if block 裡面可能也會配置資源
11/06 02:28, 5F

11/06 02:29, , 6F
這種情況若還用 goto 會崩潰的
11/06 02:29, 6F

11/06 23:25, , 7F
嗯,是該用 RAII 沒錯...
11/06 23:25, 7F

11/07 04:49, , 8F
C++ 用 RAII, 那請問 C 語言該如何處理?
11/07 04:49, 8F

11/07 23:09, , 9F
樓上請看我回文那邊,雖說那篇推文被人說為啥不用RAII,但
11/07 23:09, 9F

11/07 23:10, , 10F
其實回文裡程式會這麼寫就是純C的寫法呀!
11/07 23:10, 10F

11/08 01:04, , 11F
是阿... 所以我很納悶...
11/08 01:04, 11F

11/12 13:14, , 12F
C 沒有好的解法,所以別再用純 C 了 (無誤
11/12 13:14, 12F

11/12 13:14, , 13F
這個討論串原po就指明了C++,所以用RAII是很合理的
11/12 13:14, 13F
文章代碼(AID): #1IUIJUt6 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1IUIJUt6 (C_and_CPP)