C 語言如何不用 goto 多處 return 進行錯誤處理?

時間 2021-05-30 09:22:25

1樓:王賽

如果是用C++,大多數goto可以用RAII和多處return替代。

如邏輯複雜點,C++11可以用scope_guard加lambda,替代簡單的RAII,又可以解決一部分。

2樓:Andero

if else和while break唄,不是說不能用goto。而是goto太多不方便閱讀。思路縷不順先話流程圖,絕對好用。

3樓:zpan

不妨更嚴格一點,禁止 goto,禁止多個 return,禁止 break、continue。那麼這樣想來想去, 就只能:

intfoo

(void)if

(!err)

return

err;}

4樓:陳曉輝

我司的折衷方式是把錯誤判斷定義成乙個巨集,不允許多return,但是函式出口處都有個label,上述巨集判斷失敗都goto到這個label,放眼望去,世界和諧...

5樓:袁侃

每一步之前都對錯誤碼先給值,比如malloc的結果為null的話錯誤碼為1,那麼malloc之前就給err賦1,最後返回之前檢查如果parray不是null那麼就應該釋放記憶體。其他錯誤情況類似。變數用之前先初始化。

6樓:靈劍

沒有異常處理的語言就是這樣的,所以說Go的錯誤處理設計真心是SB級別的

其實吧說得教條主義一點,不用goto也不用return就會寫得很彆扭的程式,多半是因為邏輯沒有拆分成更清晰的方法,像一團麵條一樣,以後修改還是重構都會出問題。

但是邏輯複雜這個事情明顯就應該怪產品而不是程式設計師啊……其實有些錯誤處理想想就是挺蠢的,比如malloc返回值是否為空,我其實就沒見過malloc發生記憶體不足了程式還能繼續正常執行下去的情況……還不如check一下然後直接coredump了。

c語言goto語句到底用還是不用?

登龍 如果是初學,先掌握 C 語言中基本的迴圈語法就行了,以後當你需要用到 goto 的時候,查閱相關部落格就可以了。打基礎階段把重點放在主要的方面,一些相對用的不多的東西可以暫時忽略,等你能力上公升乙個階段再回頭學習它們會更加輕鬆的。來自乙個自學程式設計的過來人。 囧囧 絕大多數情況下是不應該使用...

C語言如何支援C 過載?

強行吐槽一下。即編譯器可以通過函式名和形參型別的匹配實現過載,不可以根據返回型別實現過載 誰說編譯器不可以根據返回值的型別過載的?只是 C 設計上沒有把返回值當作過載條件的一部分而已,語言語義上僅僅根據返回值不同來實現過載是沒有任何問題的。比如 Swift 有接近的用法 當然這裡是表示式不是函式呼叫...

如何不用牙膏刷乾淨牙?

開心 牙刷蘸食用小蘇打粉,就可以代替牙膏。小蘇打粉比起各種美白牙齒廣告打的漫天響的牙膏更有去牙黃漬的效果。我自己買的美白牙齒的牙膏,從來沒有見過效果。委屈巴巴。但是小蘇打粉得味道可能會稍微有點怪,會引起不適,比如嘔吐。牙膏替代品,小蘇打粉 這個圖里的小蘇打就是我自己買來刷牙用的,牙齒的美白度自己都能...