异常处理

wxgiter 2010-12-07 10:19:22
假设一段代码是这样的:

void function_c(char *p)
{
//do something.
}
void function_b(char *p)
{
//do something.
function_c(p);
}
void function_a(char *p)
{
//do something.
function_b(p);
}

在函数中要判断指针是否为NULL,这种情况下要在三个函数中都判断吗?
...全文
193 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2010-12-08
  • 打赏
  • 举报
回复
这得看你到底在干什么,我建议在a里把b,c函数里的要求都做判断,任何一个不满足就直接从a抛出异常.

给b,c做判断,也许b不异常,而运行到c异常了,这种情况情何以堪,意思就是要把a当做一个事务来看待,要么

全做,要么全不做.
wxgiter 2010-12-08
  • 打赏
  • 举报
回复
恩,正如大家所说,function_a是提供给外面调用的,其他两个函数是内部使用。

另外,这三个函数的调用关系写的不准确,实在是不好意思。

实际是如下的:
void function_c(char *p)
{
//do something.
}
void function_b(char *p)
{
//do something.
}
void function_a(some parameters)
{
//分配资源
for()
{
//do something.
//生成char *p;
function_b(p);
function_c(p);
//do something.
}
//释放资源
}

如果在function_a中判断:需要释放已分配资源,另外之前做的操作(赋值之类)是否需要撤销?
如果在另外两个函数中判断:要判断的地方增加了。

真是不知如何取舍...
至善者善之敌 2010-12-08
  • 打赏
  • 举报
回复
我也是这么认为只需要在
void function_c(char *p)
{
//do something.
}
中判断就可以了,因为其它两个你并没有什么具体功能需要实现!
乃不知有汉 2010-12-08
  • 打赏
  • 举报
回复
把判断交给调用方

如果是接口函数 只有判断了
rosehack 2010-12-08
  • 打赏
  • 举报
回复
看这段代码在什么地方执行,如果这段代码在一些非常需要效率的地方,那就用危险性来换效率,只要足够认真,就能保证不出错。如果是一些不经常执行的地方,那就加上判断。
我的看法是在程序中的大部分函数中都做检查,等到某段代码成为效率的瓶颈的时候,再做上述加NULL判断的优化。
pengzhixi 2010-12-08
  • 打赏
  • 举报
回复
传给函数之前就做个判断吧
luciferisnotsatan 2010-12-08
  • 打赏
  • 举报
回复
自己看。如果只有void function_a(char *p)提供给用户调用,那就在a里判断就行了。如果都会提供给用户,那就全加判断。
当然,如果为了效率,也可以牺牲安全检测。让用户自己去做这些检测,如果他们需要的话
elated 2010-12-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 nocky 的回复:]

在写代码时最好能有个层的概念,对于底层的基础函数就不要进行参数判断了,因为这样很影响性能
最好是在上层业务层进行判断,只需要在最上层判断一次就行了,只要能够遵守一个约定,安全还是可以保证的,
否则对性能影响太明显了
在标准库中,一般都不对参数进行判断的
[/Quote]
我也是这么认为的,只在一个层次上处理异常
上善若水邻 2010-12-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 nocky 的回复:]
在写代码时最好能有个层的概念,对于底层的基础函数就不要进行参数判断了,因为这样很影响性能
最好是在上层业务层进行判断,只需要在最上层判断一次就行了,只要能够遵守一个约定,安全还是可以保证的,
否则对性能影响太明显了
在标准库中,一般都不对参数进行判断的
[/Quote]
标准库中不对参数进行判断?
学习了。
無_1024 2010-12-07
  • 打赏
  • 举报
回复
都要判断 因为在每个地方都有可能会有异常
noock 2010-12-07
  • 打赏
  • 举报
回复
在写代码时最好能有个层的概念,对于底层的基础函数就不要进行参数判断了,因为这样很影响性能
最好是在上层业务层进行判断,只需要在最上层判断一次就行了,只要能够遵守一个约定,安全还是可以保证的,
否则对性能影响太明显了
在标准库中,一般都不对参数进行判断的
半斗 2010-12-07
  • 打赏
  • 举报
回复
为了安全还是都判断吧
cranium 2010-12-07
  • 打赏
  • 举报
回复
按理说,是的。
就想叫yoko 2010-12-07
  • 打赏
  • 举报
回复
要的,因为你do something了,你可能把p = NULL对吧
在每个函数入口处判断一下吧

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧