免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
61 [报告]
发表于 2007-01-07 18:09 |只看该作者
我想,我想,我想说,返回值的判断放在以后讨论,这个只是讨论入参的问题,好像没有讨论返回值的问题。
vfork是返回值的问题啊,不是入参的问题。我之前也没有分开有些走题,举的例子不恰当,其实我想说的是如果入参比较复杂怎么办。不好意思。

大家不要走题。。。。

rm 是返回值的问题,参数是合法的,返回值是合法的。
只要不是rm -rf /usr系统执行返回的是 rm -rf /就行。

论坛徽章:
0
62 [报告]
发表于 2007-01-07 19:21 |只看该作者

B

先封装成结构或者对象,但仍由B或B的下一层判断

论坛徽章:
0
63 [报告]
发表于 2007-01-07 21:13 |只看该作者
各付其责,,,,沟通很重要....文档也重要

论坛徽章:
0
64 [报告]
发表于 2007-01-07 21:22 |只看该作者
原帖由 tyc611 于 2007-1-6 19:38 发表

赞同
如果判断比较简单的话,应在被调用者中实现(优先考虑);如果判断越来比较复杂可以由调用者保证。
在健壮性、性能方面找个折衷点,考虑简单原则。
个人愚见

同意

论坛徽章:
0
65 [报告]
发表于 2007-01-07 21:53 |只看该作者
原帖由 njmpop 于 2007-1-7 15:46 发表


所以好的ps2应该加个判断功能,是不是ps2就不会升天了?

论坛徽章:
0
66 [报告]
发表于 2007-01-08 11:00 |只看该作者
这个应该是个约定吧,库函数与应用是在合作,只要有完整的文档,都是可以的。
我更倾向于调用者检查,因为很多时候,这个检查是可以忽略的,因为调用者大部分是可以确定自己的参数的合法性的。如果调用者都不知道自己的参数到底是什么的话,是不是调用者自己已经晕了。库还不同于OS,OS要防范恶意使用者,但是库与应用是合作的关系.

论坛徽章:
0
67 [报告]
发表于 2007-01-08 12:30 |只看该作者
这么看来,都有可能

文档或注释要说明清楚就好.
比如一个以一个int为参数的函数,如果注释说<100 怎么样,>100又怎么样,显然很糟糕,因为调用者可能不知道==100会发生什么.

函数应该是封装的,是透明的,除了说明之外. 不应该告诉别人"我是怎么做的"
就算是自己写的也是这样,定义要明确, 而且仅仅做它说了要做的事情,多余的代码都不能再函数里面.

论坛徽章:
0
68 [报告]
发表于 2007-01-08 12:38 |只看该作者
CALLER 要检查好。
CALLEE 一般不做深入检查,比如memcpy, strcpy, printf等。因为它不容易完全检查参数的对错(比如越界等,甚至无法检查),而且还耽误时间。

论坛徽章:
38
2017金鸡报晓
日期:2017-02-08 10:39:4215-16赛季CBA联赛之深圳
日期:2023-02-16 14:39:0220周年集字徽章-年
日期:2022-08-31 14:25:28黑曼巴
日期:2022-08-17 18:57:0919周年集字徽章-年
日期:2022-04-25 13:02:5920周年集字徽章-20	
日期:2022-03-29 11:10:4620周年集字徽章-年
日期:2022-03-14 22:35:1820周年集字徽章-周	
日期:2022-03-09 12:51:3220周年集字徽章-年
日期:2022-02-10 13:13:4420周年集字徽章-周	
日期:2022-02-03 12:09:4420周年集字徽章-20	
日期:2022-01-25 20:14:2720周年集字徽章-周	
日期:2022-01-13 15:12:33
69 [报告]
发表于 2007-01-08 13:31 |只看该作者
原帖由 converse 于 2007-1-6 17:24 发表
比如,
在函数A中调用函数B,需要确认传入的参数A是否正确,这个判断是函数B的责任还是函数A的责任呢?
也就是说是函数A在调用函数B之前做一个判断还是函数B在函数开始的时候做一个判断呢?

我最近在写的那个库,大 ...


检查参数是库的责任(必要时返回错误码),如果是动态库就一定是这样,静态库可以宽松点。assert多少没关系,release就没了。

论坛徽章:
0
70 [报告]
发表于 2007-01-08 13:56 |只看该作者
被调用者尽量检查。但主要还是靠调用者。

比如,一个最简单的strcpy(d,s)

函数中如何检查s,d的合法性? 做100%正确的检查是不可能的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP