看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《littleshan (我要加入劍道社!)》之銘言: : ※ 引述《QQ29 (我愛阿蓉)》之銘言: : : 第一個先check pointer是不是null : : 再來包個try catch : : 呼叫一些API去做我想做的事情 : : try 做完 Return E_SUCCESS : : 若是catch到就印個log 或return error code : : 根本沒有可以單純就return;的case阿 : 我好奇一件事 : 如果你們已經用 exception 來處理 error : 那為什麼還要 return error code? : 莫非你們呼叫了會使用 exception 的 library : 但自己寫的程式碼還在用 error code? : (雖然有時候不得不做這種蠢事...但能免則免吧) 其實我的腳色有點像是wrap API 例如SaveFile(....)這API我來寫... l 大 意思是說 我這邊就大膽的寫CreateFile WriteFile等等 出了錯 上層(稱為主程式好了) 主程式要知道 我這邊不是安全的他要知道該try catch起來這樣? 所以我這邊就void 也不用return error code之類的嗎? 我現在常常是寫成 try{ do something that might cause exception return xxx<==也許是E_SUCCESS 或是 true } catch(..) { //印log //看看可否recover return xxx<==error code或是false; } 這種寫法我也沒特別查書籍或是資料說有沒有問題 單純就是自己覺得這樣寫OK 我自己是覺得 主程式能不handle就不handle exception 我來幫她處理 若有問題 他直接可以從error code去判斷要幹嘛 而且常常聽到try catch好像會有效能上考量.... 但原因是為啥我其實不清楚 才怕說濫用try catch會不會有問題 : : 就算基本的save to file : : 都有可能吐Exception : : 上面使用者也必須要知道有沒存成功 : : 所以說 到底什麼時候是真的可以大膽寫成void? : 統一用 exception 那你就可以大膽寫 void 了 : caller 要知道成不成功,就請他自己去try/catch l大所說的統一用exception意思是 我出問題 就throw? 主程式完全要溝通好說 你要用我的API 一定要try catch起來保險? 我這邊就完全不處理 error case直接往上報? 但這樣會不會造成主程式要處理太多事情 (感覺就是我這邊包的太淺) : : 另外try catch是不是只要document寫說這API有可能吐exception就必須去夾一下? : : 謝謝 : 當然不是 : 如果你知道錯誤要怎麼處理,那就要 catch : 你不知道怎麼處理的話,就不要 catch 讓 exception 往上傳遞 : (不過有時候你需要 catch and rethrow 以避免資源洩露的問題) 我現在好像都是變成 catch and return error code而不是rethrow... 如果上層要再用try catch包一次的話 會不會造成效能的差異呢? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.147.15.66
goodGG:C++ coding standards #69 establish a rational error 01/03 16:52
goodGG:handling policy, and follows it strictly. 01/03 16:52
loveme00835:問一個問題: 你自己處理有辦法處理得好嗎? 或是有能讓 01/03 20:49
loveme00835:所有 caller 都滿意的解決方案, 那你就可以吸收掉這個 01/03 20:49
loveme00835:錯誤, 不過同時也要想出讓人能接受的執行結果 01/03 20:50