免费注册 查看新帖 |

Chinaunix

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

[C++] 有人会在程序中try catch吗? [复制链接]

论坛徽章:
0
121 [报告]
发表于 2008-09-05 01:57 |只看该作者
原帖由 zylthinking 于 2008-9-5 01:52 发表


恩, 你面对的就是一个你所说的50%以外的程序员, 另外, 你上个贴子误解我了, 我也误解你了, 所以把上个贴子重新编辑了。
而且, 说到底我们说的是机制问题, 不应该掺合程序员的修养怎样。



机制是和人性相关的:)

异常机制的“eat every exception”的能力,就给了人偷懒的机会,从而导致了代码质量的下降。虽然在很多情况下,catch(...)可以加快项目的“完成”时间。

如果异常机制不允许catch(...),那么就不容易导致劣质代码。不过这样的异常机制会有人用吗?

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
122 [报告]
发表于 2008-09-05 02:00 |只看该作者
第一, 我用;
第二, 返回值也不能就保证了不偷懒。

extern int open();

bool open_wrapper(){
    ....
    open();
    ....
    return true;
}
这样的代码不是稀罕物, 你说某人偷懒了没有

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
123 [报告]
发表于 2008-09-05 02:07 |只看该作者
call, 2点了, 先睡觉, 什么事明天再说

论坛徽章:
0
124 [报告]
发表于 2008-09-05 08:48 |只看该作者
原帖由 zylthinking 于 2008-9-5 02:00 发表
第一, 我用;
第二, 返回值也不能就保证了不偷懒。

extern int open();

bool open_wrapper(){
    ....
    open();
    ....
    return true;
}
这样的代码不是稀罕物, 你说某人偷懒了没有




open()有返回值而调用者不检查,这是很明确的错误,责任在调用者。检查代码的人可以毫不犹豫的说,这是错的。

catch(...)是多明显的错误就很难说了。因为无数的项目无数代码里面,有无数的catch(...)。异常机制的catch(...)设计出来就是给人用的,这就等于鼓励程序员不要细分各种异常。

你可以现在回头去看看自己项目组里面的代码,有多少catch(...)这样的代码。理论上每个catch(...)都应该是经过严格审核的,程序里面应该基本上没有catch(...)才对。可事实上没人会仔细审查每个catch(...),也没人能够这样做。

项目里面catch(...)越多,程序犯业务错误的机会就越多,虽然程序看起来不会crash。

返回值机制可以杜绝“不检查返回值”的情况,因为返回值机制就是这么一个麻烦细致的机制,谁偷懒一目了然。
而异常机制无法杜绝“catch(...)”的情况,因为这套机制里面设计catch(...)就是给人用的。

[ 本帖最后由 wwwsq 于 2008-9-5 09:05 编辑 ]

论坛徽章:
0
125 [报告]
发表于 2008-09-05 10:02 |只看该作者
请参照微软MSDN有关与MSXML的用法,里面详细说明了在C++中使用try。。catch
不过你要懂COM,也就是抽象类(接口)的使用方法

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
126 [报告]
发表于 2008-09-05 16:43 |只看该作者
原帖由 wwwsq 于 2008-9-5 08:48 发表




open()有返回值而调用者不检查,这是很明确的错误,责任在调用者。检查代码的人可以毫不犹豫的说,这是错的。

catch(...)是多明显的错误就很难说了。因为无数的项目无数代码里面,有无数的catch(... ...


讲道理要摆事实, 你不能老凭主观感觉说话。 你用红字来表明是 错误, 对, 就是错误, 我举的例子就是说就算返回值也是要犯错误的。

catch(...)是多明显的错误就很难说了: 这个见仁见智, 你说它不明显我也没办法, 我就说返回值也不明显, 虽然违心, 你也拿我没办法, 呵呵。

因为无数的项目无数代码里面,有无数的catch: 检查返回值得if语句大概也是无数吧。
不抬杠了, 谁也说不服谁, 倒是耽搁了睡觉好时间。

论坛徽章:
0
127 [报告]
发表于 2008-09-05 16:50 |只看该作者
异常跟错误是不同概念。错误应防止,异常不可避免。

论坛徽章:
0
128 [报告]
发表于 2008-09-05 16:57 |只看该作者
try catch 是很好的.只要对对应的异常进行正确处理,应该是没有问题的.

论坛徽章:
0
129 [报告]
发表于 2008-09-08 15:01 |只看该作者
真是佩服zylthinking的耐性
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP