免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 我learnc
打印 上一主题 下一主题

[C++] 工作中你是否使用C++异常?  关闭 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-08-20 17:53 |只看该作者
原帖由 ddkkd 于 2009-8-20 16:45 发表
说的很清楚,不过像是再说java。
呵呵,简单具体点问吧,有一个函数,里面第三条语句会出现一个异常,你并不知道,函数会按你的返回值返回吗?
有没有可能直接异常退出?
还会把你要的东西传递出去吗?
不是 ...


C++的异常是要主动throw的,你说的语句执行时出现异常如访问内存,那是另一种情况,和C++没关系,只是在有些系统如VC6.0上它生成的指令连这个也捕获了,因为这些运行于保护模式的进程导致异常之后系统会允许它自己去做些处理,这个是库的能力,和语言本身没关系;但对于嵌入式的平台而言,这种问题一般导致系统异常,要么系统崩溃,要么这个触发异常的任务被挂起,这取决于系统异常处理是如何设计的。

论坛徽章:
0
22 [报告]
发表于 2009-08-20 18:12 |只看该作者

回复 #21 Cyberman.Wu 的帖子

你还是很明白嘛,呵呵。
只不过你前面说的函数和try一样效果,实在有点误导人。
函数自己不知道他会出问题,他那儿出问题了。
所以咱主动try它,捉出来,直到这个问题严重到try也不中了,就core了。O(∩_∩)O~

论坛徽章:
0
23 [报告]
发表于 2009-08-20 18:20 |只看该作者
呵呵,ddkkd 兄把“异常”想象得太玄忽了吧~ C++里的异常不就是throw出来的异常么? 没有人throw哪来的异常。 这和底层的CPU异常是两码事。
本质上说,这个和C里面的setjmp/longjmp没什么差别, 就是跨越调用栈的长跳转而已。
并且,setjmp/longjmp有比throw/catch更灵活,不仅可以往上跳,还可以往旁边跳(比如你可以为你的进程准备两个用户栈,然后通过setjmp/longjmp在这两个栈间切换。用户态的线程应该就是基于这种思路来实现的吧)。

论坛徽章:
0
24 [报告]
发表于 2009-08-20 21:29 |只看该作者
我比较不喜欢用异常。可以说在我写过的代码中, 基本没用过

我一直以来用过程化与对象话混合在一起写程序。而且喜欢用template and macro.

基本是属于那种不论不类的风格的, 我不知道异常是否好用, 但可以很负责的说, 不用它, 一样可以写出好的程序。

论坛徽章:
0
25 [报告]
发表于 2009-08-20 21:43 |只看该作者
原帖由 Cyberman.Wu 于 2009-8-20 16:19 发表


这个的确是个问题,实际上错误处理要求一个整体性的设计,这方面都没见过几家公司做得比较好的。有时候看一个系统正常处理流程大家都会做,真正体现设计水平的反而体现在出问题的处理上。

你现在用啥方法?
我就是函数为单位,判断返回值,根据需求流程再适当的重新执行,这个“适当的”把我郁闷坏了,情况太多了。这块要设计一个“通用机制”,最起码在这个项目里面是通用的。
有啥好思路没?

论坛徽章:
0
26 [报告]
发表于 2009-08-20 23:42 |只看该作者

回复 #25 prolj 的帖子

用C的话基本上是以函数为单位了,setjmp/longjmp虽然能实现长跳转,但在现实项目中没用过;但就算单函数处理,错误最好也归一下类,定一些大致什么样的错误做什么处理的一些基本原则。
说错误处理是系统性的有时候指其它一些东西,如目前如何记录、错误信息如何显示,从内部讲错误码如何定义。以前见过有的错误出错之后报给用户一个代码0xNNNNNNNN,用户肯定是傻眼了;从开发的角度看,有人出错就返回-1,导致别人用他API时出错了只能一步步去调。错误信息有时候也不是只打印一下就OK的,有的系统这样是不可行的,根本不可能有人看到。

这个东西设计起来有时候挺难的,以前做过的许多项目回过头去看的时候感觉这方面都不怎么成功。

论坛徽章:
0
27 [报告]
发表于 2009-08-21 01:42 |只看该作者
用,不過少用

论坛徽章:
0
28 [报告]
发表于 2009-08-21 09:12 |只看该作者
原帖由 Cyberman.Wu 于 2009-8-20 23:42 发表
用C的话基本上是以函数为单位了,setjmp/longjmp虽然能实现长跳转,但在现实项目中没用过;但就算单函数处理,错误最好也归一下类,定一些大致什么样的错误做什么处理的一些基本原则。
说错误处理是系统性的有 ...

做程序员想要活长点,就别想那么多,我算是体会到了,有时候大多数人都是在“制造”错误,而不是“处理”错误。。。所以,好好掂量掂量,不该自己考虑的问题就别考虑。。。

论坛徽章:
0
29 [报告]
发表于 2009-08-21 10:03 |只看该作者

回复 #28 alexhappy 的帖子

所以做整合的那位就是擦屁股的了
擦屁股不算,连肠子都要帮他洗一洗

论坛徽章:
0
30 [报告]
发表于 2009-08-21 10:14 |只看该作者
原帖由 zhujiang73 于 2009-8-20 11:29 发表



应该是错误用异常,状态用返回值。

比如,要在数据库中查找信息,没找到用返回值,数据库连不上用异常。



数据库连不上也有返回值的,为什么用异常呢?

什么时候用异常?什么时候用返回值?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP