免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1570 | 回复: 6
打印 上一主题 下一主题

讨论!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-03-02 13:26 |只看该作者 |倒序浏览
  作为开发团队的一员,你需要实现一些库函数提供给其他人使用。假设你实现的一个函数原型如下:


  1. int DoSomeThing(char* pParam)
  2. {
  3. ...
  4. }
复制代码


  你们约定好参数pParam不能为NULL,但为了防止调用者错误传递NULL,你需要在你的函数里做判断处理。

  请问你会选择那种方式,并说明原因?

  1. (a) if (!pParam)
  2. return 0;

  3. (b) if (!pParam)
  4. return ERROR_PARAM;

  5. (c) if (!pParam)
  6. pParam = "";
  7. ...

  8. (d) if (!pParam)
  9. throw EXCEPTION_ERROR_PARAM;

  10. (e) if (!pParam)
  11. MessageBox(...);

  12. (f) assert(!pParam);

复制代码

论坛徽章:
0
2 [报告]
发表于 2003-03-02 13:59 |只看该作者

讨论!!!

1)比较通用的方法应该是a和b,提供给调用者自己判断,
在这样的方式下,需要调用者知道函数的返回值的意义,
所以需要在开发者之间进行很好的协调。函数提供者
函数需要对函数进行明确的注释。

2)c的做法我不会选择,因为给lParam赋一个空字符串,
然后做一个没有意思的执行,做法不是很合适;

3)e的做法不很通用,写出来的函数不能适应所有环境;

4)我倒是喜欢用d的做法,函数调用者在catch中解决函数
异常。
   使用try,catch是一个比较好的方法,一些商用的API
一般都提供比较强的异常处理功能。

hopecao,不知你喜欢使用什么方式??

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2003-03-02 15:04 |只看该作者

讨论!!!

呵呵,这好像是C考试题中的一道。

C里面通用的做法是f。

论坛徽章:
0
4 [报告]
发表于 2003-03-03 14:27 |只看该作者

讨论!!!

F
1. 开发
2. easy

论坛徽章:
0
5 [报告]
发表于 2003-03-03 14:27 |只看该作者

讨论!!!

F
1. 开发
2. easy

论坛徽章:
0
6 [报告]
发表于 2003-03-04 11:54 |只看该作者

讨论!!!

好像一般都是用f,除非你检测到还要进行一些别的处理

论坛徽章:
0
7 [报告]
发表于 2003-03-05 11:51 |只看该作者

讨论!!!

这是问题提出者的选择: 选择d+f。
      assert只在debug标志的时候有用,而在编译release版本的时候不起作用。assert对于检查硬编码的错误,是非常有用的,能够及时的查处编码的错误。比如borland c++的类库源代码中就有很多这样的assert。但是assert不是万能的,因为有很多错误的发生不是完全在编译时发生的,而是运行时的错误。在release后,assert是不可能依赖的。那么,我们就需要exception这一机制来检测运行时错误,并相应的做出处理。当然,在异常检测和处理过程中还有许多需要讨论的问题,由于不是这一题目的范围,我们没有必要继续讨论得太多,但是,提出来希望大家注意:异常不是捕获了就完成任务了,而要对于不同的情况,采取不同的处理办法,千万不能只是捕获,而不做任何处理,那样和不捕获异常没有任何区别。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP