C语言漫谈(2)
2008-02-23 05:25:48来源:互联网 阅读 ()
(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,或别得什么的。既然已是约定,就干脆付起责任。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: Linux下面如何进行C语言编程
下一篇: C语言学习初次体会
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
