作者QQ29 (我愛阿蓉)
看板C_and_CPP
標題Re: [問題] Return值是void的使用時機....
時間Mon Jan 3 16:41:45 2011
※ 引述《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