免费注册 查看新帖 |

Chinaunix

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

[函数] [讨论]判断参数正确性是调用函数的责任还是被调用函数的责任? [复制链接]

论坛徽章:
0
51 [报告]
发表于 2007-01-07 15:50 |只看该作者
另外很多电器都有保险, 为了防治损失. 苹果, 如果bill gates 那么他买到坏的也无所谓, 他用来检查苹果是不是好的时间, 已经创造了几车苹果的财富.

其实这个就是对b的信任。b没有考虑到的那是b的事。

论坛徽章:
0
52 [报告]
发表于 2007-01-07 15:53 |只看该作者
原帖由 Edengundam 于 2007-1-7 15:46 发表
假币不合理, 计算机中, 理想状况是正确调用函数, 没有伪造信息, 如果每个人都诚信, 那么银行人员就不需要数了(所有人都诚信)


这就是信任问题,对于理想情况下,不需要判断入参,所有的都可以解决,都可以信任。

存款人员是a,营业员是b,不是很好的表述了这个问题?假币就是不合法参数。

论坛徽章:
0
53 [报告]
发表于 2007-01-07 15:53 |只看该作者
原帖由 njmpop 于 2007-1-7 15:50 发表
另外很多电器都有保险, 为了防治损失. 苹果, 如果bill gates 那么他买到坏的也无所谓, 他用来检查苹果是不是好的时间, 已经创造了几车苹果的财富.

其实这个就是对b的信任。b没有考虑到的那是b的事。



这也就是很大项目, 自己包装很库函数...也算不信任吧...无论是性能还是其他...
不过你想那么多库, 那么多OS, 接口都不太一样, 软件工程难度可想而知, 所以 JAVA 确实是值得称赞的东西

论坛徽章:
0
54 [报告]
发表于 2007-01-07 15:57 |只看该作者
其实我非常想知道一个由a判断比b判断的好处的例子。

只不过是在讲一个措施,如何避免a误操作b。
而没有讲为什么费这么多力气的好处在那里?

性能等问题我已经反驳了。
希望有更好的例子。

论坛徽章:
0
55 [报告]
发表于 2007-01-07 16:05 |只看该作者
原帖由 njmpop 于 2007-1-7 15:57 发表
其实我非常想知道一个由a判断比b判断的好处的例子。

只不过是在讲一个措施,如何避免a误操作b。
而没有讲为什么费这么多力气的好处在那里?

性能等问题我已经反驳了。
希望有更好的例子。



gets, fgets中gets绝对不应该用. fgets中如果buf分配的空间比传进去的小, 谁应该负责?(绝对有会人犯这个错误...)

A判断是责任, B判断也是责任. A判断返回值是天经地义... 因为人会犯错...

论坛徽章:
0
56 [报告]
发表于 2007-01-07 16:13 |只看该作者
原帖由 Edengundam 于 2007-1-7 16:05 发表



gets, fgets中gets绝对不应该用. fgets中如果buf分配的空间比传进去的小, 谁应该负责?(绝对有会人犯这个错误...)

A判断是责任, B判断也是责任. A判断返回值是天经地义... 因为人会犯错...



1。所有的交互应该以信任为基础。
2。两次握手还是三次握手那个网络连接的例子,就是很好的例子。
3。返回值等下次讨论,这次讨论的是入参,没有讨论回参。这应该是确认消息。嘿嘿。
4。程序如果能从系统中获取buf的大小的话,就很棒了,但c没有提供。
5。fgets没有按照b要判断的规则来做,导致大家出错?我对fgets不大熟悉。
6。其实unix的函数里有好几个是不好的,不能拿那些例子。历史原因吧。有人说过strcpy的问题。因为这个错误,所以才要求b要判断。

[ 本帖最后由 njmpop 于 2007-1-7 16:21 编辑 ]

论坛徽章:
0
57 [报告]
发表于 2007-01-07 16:23 |只看该作者
原帖由 Edengundam 于 2007-1-7 16:05 发表



gets, fgets中gets绝对不应该用. fgets中如果buf分配的空间比传进去的小, 谁应该负责?(绝对有会人犯这个错误...)

A判断是责任, B判断也是责任. A判断返回值是天经地义... 因为人会犯错...


好像你在说,a要判断,b要判断,如果b判断了,a是不是就不用判断了?
正是因为b没有判断,所以大多数人才会出错,还不好查这个错误。

[ 本帖最后由 njmpop 于 2007-1-7 16:24 编辑 ]

论坛徽章:
0
58 [报告]
发表于 2007-01-07 16:39 |只看该作者
原帖由 njmpop 于 2007-1-7 16:23 发表


好像你在说,a要判断,b要判断,如果b判断了,a是不是就不用判断了?
正是因为b没有判断,所以大多数人才会出错,还不好查这个错误。



这是个观念问题 vfork 之后如果你马上不是 exec, 而修改些全局变量, 父进程会死的很惨, 这个 vfork 是已经被标记废弃了, 可是出于某些原因, 还是都提供 vfork 吧.

另外就是你是root用户, 做一个 rm / 的操作....恩,这个世界清净了... 当今社会的人, 首先应该学会的是阅读使用说明, 否则一切后果自负...法盲就是这样... RAID安全嘛? NO, 磁带备份? NO 地球安全嘛? NO...:em11:

安全里面要三权分立(我记不得啥了, 有个审计...)......呵呵

[ 本帖最后由 Edengundam 于 2007-1-7 16:43 编辑 ]

论坛徽章:
0
59 [报告]
发表于 2007-01-07 16:44 |只看该作者

看情况而定

凡事无绝对,我觉得是不是这样更合理:
理想:B判断是责任, A判断也是责任. A判断返回值是天经地义.更不能因为B进行了判断,A就不判断了!(比如交易,RPC等等)
退一步:只是B判断
再退一步:都不判断

判断语句写得越多,我觉得只是越影响程序员的心情,而不是性能。当发现判断语句比应用逻辑长好几倍的时候,估计大多数程序员都开始在心里咒骂了。

为什么,现在很多人开始用Java甚至是Python/Perl,而不是B语言?这是因为大家都不想把时间浪费在DEBUG上。所以我觉得这个问题的答案好像取决于你或者老板想要多严格?

[ 本帖最后由 pgmuse 于 2007-1-7 16:57 编辑 ]

论坛徽章:
0
60 [报告]
发表于 2007-01-07 16:50 |只看该作者
请大家心平气和地讨论,否则本帖又要锁了……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP