手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

c研发策略-之-错误处理

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

  在使用任何语言进行应用程式研发时,我们都应该提前规划好如何处理错误。Java和c 中普遍使用异常来进行错误处理,但是c语言,因为没有提供一个很优雅的异常机制,所以明确如何进行错误处理显得很重要。C语言中的错误处理有多种方式,总结如下:大家能够讨论这些处理方式的优劣,这样等以后在程式研发中,我们能够从整体上为程式设计更好的错误处理方法。

  1. 返回值方式:用函数的返回值标志函数是否执行成功。比如成功返回1,失败返回0。这种方式的好处是简单方便,而且不影响效率,保持了c语言的高效率。但是仍然有问题,一个问题是代码可读性的问题,假如每个函数都有这样的返回值的话,为了保持程式的正确运行,我们必须对每个函数进行正确性验证,就是在调用函数的时候检查他的返回值,这样程式代码很大一部分就可能花费在错误处理上。第二个问题就是函数的返回值冲突的问题。假设strlen函数也可能会出错,使用这种错误处理策略他的返回值应该标志他是否执行成功,但是函数计算的字符串的长度值如何自然地传递出来?最后一个问题可能是最重要的:他不强制您处理错误,而且在不进行处理的情况下,程式仍然能够运行,但结果是不可预知的。

  2.全局errno方式:就是在出现错误的时候,将错误代码记录到一个全局变量errno中。比如waitpid()函数在被信号中断的情况下,将errno配置为EINTR(一宏定义常量)。这种方式解决了返回值方式碰到的返回值冲突问题,而且效率方面也是很令人愉悦的。但是他需要用户在调用函数后检查errno的值,这种确保是脆弱的,程式仍然有可能在不处理那些errno的情况下”安然”地运行,导致未定义的结果。另一个问题出在多线程方面,errno不是线程安全的,多个线程操作同一个errno会造成混乱。

  3.错误封装:就是将每个有错误返回值的函数分别用一个函数包起来,比如waitpid()函数能够封装成Waitpid()(首字母大写),在这个函数中处理相应的错误。这种错误处理方法能够很好的解决很多问题,应该说效果很好,但是有几个方面需要商榷,一是,并不是每个函数的错误都以一种方式进行处理,另一方面,听说c语言的函数调用开销相对很高,在函数外面再包上一层会影响性能。

  4.异常:关于异常的说明和实现能够参考http://xombat.javaeye.com/admin/show/94540,他的长处是能模拟实现c 中异常的一些长处。但是这个异常机制很脆弱,使用时要注意很多问题,而且他的性能开销肯定也会不小。

  5. Goto语句:,当发生错误时,利用goto语句跳到相应的错误处理函数中。因为一直以来对goto语句的偏见,和goto语句本身对程式结构性的影响,所以本人一直以来没有用过这种方式,也不知道这种方式会有什么优劣。

  总的来说,每个方式都不是尽善尽美的,不知道大家碰到这些问题是怎么处理的?




文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS