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