Re: [討論] 錯誤處理 exception assert log 選哪一種

作者: diabloevagto (wi)   2014-05-17 16:34:58
我不是高手,只是新手...
一點經驗分享
※ 引述《StarTouching (撫星)》之銘言:
: Error handling大致有以下幾種方式
: 1. 丟出例外 請呼叫的人掌握狀況
exception 只有在 c++ 才有,在 c 就沒有這個選項了
雖然 c 可以用 setjmp.h 不過用起來沒這麼直覺
而且你如果寫了一個dll,不確定對方會用 c 或 c++ import 的話你也不能用 exception
但是在 c++ 的話個人偏好用 exception,用方法4每次都要判斷 return 實在很麻煩
另外定義一個 error class,裡面定義 error code 跟 error message
error code 就可以模擬方法4
error message 可以當作方法3要寫得資料
: 2. assert
: ("Exceptions address the robustness of your application while assertions
: address its correctness"
: 出處: http://stackoverflow.com/a/1957656/1992731 )
在 release 的時候基本上不會用這個吧...
直接把程式整個關閉= =
: 3. 寫error log
這個挺好用的,不一定要 error 才寫到 log,平常就可以把有用的訊息都寫出來
可以更方便的了解程式流程
android 的 logcat 就挺方便的,他有定義不同層級的 log
: 4. return一個值 請呼叫的人自己處理
在純 c 的環境我會用這種方式回傳
定義一組 error code list 方便出現錯誤的時候判斷
如果是寫 api 給別人用可以用這種方式,客戶發生錯誤的時候直接回報 error code
可以初步判斷錯誤原因
可以考慮用 or 的方式組合 error code
ex.錯誤訊息定義為 0xff000000 | system error code
你今天是要用 c 的 open 開啟一個檔案,但檔案不存在,errno 就會是 0x2
這時你就可以組合出 0xff000000 | 0x0002 = 0xff000002
直接 return 0xff000002
如果整個都沒有錯誤就直接回傳 0x0
但程式在每次呼叫 function 都要在用 if 判斷 return ,寫起來就很多重複的 code
: 5. 測資可以過就好 可以跟Boss交差就好 (誤)
這就良心問題啦...
如果你趕著要畢業就這樣做吧...

Links booklink

Contact Us: admin [ a t ] ucptt.com