免费注册 查看新帖 |

Chinaunix

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

谁是多余的? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-07-07 17:53 |只看该作者
还是要全面点~

论坛徽章:
0
12 [报告]
发表于 2010-07-07 17:57 |只看该作者

论坛徽章:
0
13 [报告]
发表于 2010-07-07 19:55 |只看该作者
如果楼主牢记住了一切别人写的API内部的所有边界及例外判定,因此可以精确的避免在自己的程序中写出冗余的例外检查语句。真是如此的话,飞升也指日可待了。

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
14 [报告]
发表于 2010-07-07 20:38 |只看该作者
strcpy内部的检查是多余的,甚至可以算得上是错误的
因为C标准规定了strcpy参数字符串必须是有效的,因此重复检查是多余的

如果你认为应该检查参数是否为0的话,那么是不是应该检查参数是否为1,是否为2?是不是应该检查字符串是否已经被释放。
任何一个算法,只应该保证在契约之内的正确性。在契约之外,不应该保证其正确,也不应该保证其错误。而且从理论上讲,也无法做到。比如“行走于桥上可保证安全”,你如何做到别人跳桥时一定保证其生还,或别人跳桥时一定保证其死亡?

另外,为什么参数为0就要让它出错呢?虽然目前所有操作系统在0内存处存的都不是字符串,但C标准没有权力要求所有编译器都不可以在0内存处存字符串。
所以对于strcpy,C标准要求用户输入的是合法字符串,而不是“非某个特定值的地址”。

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
15 [报告]
发表于 2010-07-07 22:12 |只看该作者
strcpy内部的检查是多余的,甚至可以算得上是错误的
因为C标准规定了strcpy参数字符串必须是有效的,因此重 ...
bruceteen 发表于 2010-07-07 20:38



    assert是用来做什么的?assert就是用来检查程序员犯的错误的。对于strcpy来说,如果参数有一个是NULL的,那么这次调用是错的,这时assert可以告诉程序员,你这里写错了。因此strcpy内部的检查并不多余。

论坛徽章:
0
16 [报告]
发表于 2010-07-07 22:41 |只看该作者
该怎么用看文档,别去看实现
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP