正文

第1集 初次与异常处理编程相邂逅2006-01-19 16:52:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/mroske/9738.html

分享到:

  和其它很多程序员一样,本书的主人公阿愚也是在初学C++时,在C++的sample代码中与异常处理的编程方法初次邂逅的,如下:

// Normal program statements
...

try
{
// Execute some code that might throw an exception.
}
catch( CException* e )
{
// Handle the exception here.
// "e" contains information about the exception.
e->Delete();
}

// Other normal program statements

  瞧瞧,代码看上去显得那么整齐、干净,try block和catch block遥相呼应,多有对称美呀!因此主人公初次见面后就一见钟情了。

  为什么要选用异常处理的编程方法?
  当然更为重要的是,C++中引入的异常处理的编程机制提供给程序员一种全新的、更好的编程方法和思想。在C++中明确提出trycatch异常处理编程方法的框架之前的年代,程序员是怎样编写程序的,如下:

void main(int argc, char* argv[])
{
if (Call_Func1(in, param out)
{
// 函数调用成功,我们正常的处理
if (Call_Func2(in, param out)
{
// 函数调用成功,我们正常的处理
while(condition)
{
//do other job
if (has error)
{
// 函数调用失败,表明程序执行过程中出现一些错误,
// 因此必须处理错误
process_error();
exit();
}
//do other job
}
}
else
{
// 函数调用失败,表明程序执行过程中出现一些错误,
// 因此必须处理错误
process_error();
exit();
}

}
else
{
// 函数调用失败,同样是错误处理
process_error();
exit();
}
}

  因为程序的执行过程中总会遇到许多可预知或不可预知的错误事件,例如说,由于内存资源有限导致需要分配的内存失败了;或某个目录下本应存在的一个文件找不着了;或说不小心被零除了、内存越界了、数组越界了等等。这些错误事件存在非常大的隐患,因此程序员总需要在程序中不断加入if语句,来判断是否有异常出现,如果有,就必须要及时处理,否则可能带来意想不到的,甚至是灾难性的后果。这样一来,程序可读性差了很多,总是有许多与真正工作无关的代码,而且也给程序员增加了极大的工作负担,多数类似的处理错误的代码模块就像满山的牛屎一样遍地都是(程序员不大多是“牛”人吗?所以。。。哈哈)。

  但C++中的异常处理的机制彻底改变了这种面貌,它使真正的计算处理和错误处理分开来,让程序员不再被这些琐碎的事情所烦扰,能关注于真正的计算处理工作。同时代码的可读性也好了。因此我们有理由选择异常处理的编程方法。具体原因如下:
  1、 把错误处理和真正的工作分开来;
  2、 代码更易组织,更清晰,复杂的工作任务更容易实现;
  3、 毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了;
  4、 由于C++中的try catch可以分层嵌套,所以它提供了一种方法使得程序的控制流可以安全的跳转到上层(或者上上层)的错误处理模块中去。(不同于return语句,异常处理的控制流是可以安全地跨越一个或多个函数 )。
  5、 还有一个重要的原因就是,由于目前需要开发的软件产品总是变得越来越复杂、越来越庞大,如果系统中没有一个可靠的异常处理模型,那必定是一件十分糟糕的局面。

  相信绝大多数程序员都知道C++中的异常处理的编程方法,可还是有很多人已习惯原来单纯的面向过程的代码组织方式,不太习惯或较少使用trycatch异常处理。为了使您编写的代码更安全;为了使您编写的代码让他人更易阅读,主人公阿愚强烈建议在您书写的代码中尽可能多用异常处理机制,少一些不必要的if判断语句。

  下一集详细介绍C++中的异常处理的语法。

阅读(2903) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册