C语言漫谈(2)

2008-02-23 05:25:48来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

(b) if (!pParam)
return ERROR_PARAM;

(c) if (!pParam)
pParam = "";
...

(d) if (!pParam)
throw EXCEPTION_ERROR_PARAM;

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

(f) assert(!pParam);

(附加说明一点,基于现在研发人员技术分布情况和参和讨论会的人员的技术分布情况,这次所列举的例子都是C/C 和Java方面的,不涉及到VB, PB,Delphi等语言。但是对于这些程式员,讨论也是有借鉴作用的。)
关于这个问题,大概是任何的程式员都会碰到的。所以,在网上和讨论会上,都发生了激烈的争论和意见交换。我大概把主要的几种观点记录了一下,列举在下面:

1、选择f的理由
因为非NULL是约定,所以能够确定是调用者的问题,f能够明确地指出这一点,防止错误扩散。
我的附加说明: 防止错误扩散的意思是,假如用其他方式,比如throwexception的方式,这个异常不一定会在调用此函数的上一层被捕获到,可能会被继续抛出直到最上一层或直到在某一层被catch到,这样的话,错误就会距离发生地点很远,扩散开来。
这一观点,代表了一大部分的程式员的观点。

2、反对用f
不赞成assert, assert更重要的作用是程式体里面的一个注释, 在阅读程式的时候起作用不能依赖他来检测错误, 很大程度上assert容易使使用者依赖他本不应该依赖的东西。这也代表了部分程式员的观点,认为assert是不可依赖的,而应该依赖于错误检测,比如返回值或异常。

3、另外一种观点
f和d都可取。假如没有系统开销的考虑,d则更好些。能够一举两得。假如没人catch这个exception,其结果就跟f相同,按bug处理,dump core留下一stack trace。假如有人catch,那就按运行错误处理......但是返回一特初值表示错误,只是将错误上交,掩耳盗铃而已。最终总得有个人assert,messagebox,throw exception,perror exit,或别得什么的。既然已是约定,就干脆付起责任。



[1] [2] [3] 下一页

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: Linux下面如何进行C语言编程

下一篇: C语言学习初次体会