Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2285685
  • 博文数量: 668
  • 博客积分: 10016
  • 博客等级: 上将
  • 技术积分: 8588
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-29 19:22
文章分类

全部博文(668)

文章存档

2011年(1)

2010年(2)

2009年(273)

2008年(392)

分类:

2008-08-07 08:53:40

 在这之前的所有文章中,都是阐述关于C++的异常处理机制。的确,在C++语言中,它提供的异常处理的模型是非常完善的,主人公阿愚因此才和“异常处理”结下了不解之缘,才有了这一系列文章的基本素材,同时主人公阿愚在自己的编程开发过程中,也才更离不开她,喜欢并依赖于她。

  另外,C++语言中完善的异常处理的模型,也更激发了主人公阿愚更多其它的思考。难道异常处理机制只有在C++语言中才有吗?不是的,绝对不是这样的。实际上,异常处理的机制是无处不在的,它与软件的编程思想的发展,与编程语言的发展是同步的。异常处理机制自身的发展和完善过程,也是并记录了我们在编程思想上和编程方法上的改变、进步和发展的过程和重要的足迹。

  在前面的文章中,早就讲到过,异常处理的核心思想是,把功能模块代码与系统中可能出现错误的处理代码分离开来,以此来达到使我们的代码组织起来更美观、逻辑上更清晰,并且同时从根本上来提高我们软件系统长时间稳定运行的可靠性。那么,现在回过头来看,实际上在计算机系统的硬件设计中,操作系统的总体设计中,早期的许多面向结构化程序设计语言中(例如C语言),都有异常处理的机制和方法的广泛运用。只不过是到了像C++这样面向对象的程序设计语言中,才把异常处理的模型设计到了一个相当理想和完善的程度。下面来看看主人公阿愚对在C语言中,异常处理机制的如何被运用?

goto语句,实现异常处理编程,最初也最原始的支持手段

  1、goto语句,程序员朋友们对它太熟悉了,它是C语言中使用最为灵活的一条语句,由它也充分体现出了C语言的许多特点或者说是优点。它虽然是一条高级语言中提供的语句,但是它一般却直接对应一条“无条件直接跳转的机器指令”,所以说它非常地特别,它引起过许多争议,但是这条语句仍然一直被保留了下来,即便是今天的C++语言中,也有对它的支持(虽然不建议使用它)。goto语句有非常多的用途或优点,例如,它特别适合于在编写系统程序中被使用,它能使编写出来的代码非常简练。另外,goto语句另外一个最重要的作用就是,它实际上是一种对异常处理编程,最初也最原始的支持手段或方法。它能把错误处理模块的代码有效与其它代码分离开来。例程如下(请与第一集文章中的示例代码相比较):

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) goto Error;

//do other job
}
}
// 如果错误直接跳转
else goto Error;

}
// 如果错误直接跳转
else goto Error;

// 错误处理模块
Error:
process_error();
exit();

}

  呵呵!上面经过改善后的代码是不是更加清晰了一些,也更简练了一些。因此说,goto语句确是是能够很好地完成一些简易的异常处理编程的实现。虽然它较C++语言中提供的异常处理编程模型相差甚远。

为什么不建议使用goto语句来实现异常处理编程

  虽然goto 语句能有效地支持异常处理编程的实现。但是没有人却建议使用它,即便是在C语言中。因为:

  (1) goto语句能破坏程序的结构化设计,使代码难于测试,且包含大量goto的代码模块不易理解和阅读。它一直遭结构化程序设计思想所抛弃,强烈建议程序员不易使用它;

  (2) 与C++语言中提供的异常处理编程模型相比,它的确是太弱了一些。例如,它一般只能是在某个函数的局部作用域内跳转,也即它不能有效和方便地实现程序控制流的跨函数远程的跳转。

  (3) 如果在C++语言中,用goto语句来实现异常处理,那么它将给面向对象构成极大破坏,并影响到效率。这一点,以后会继续深入阐述。

总结

  虽然goto语句缺点多多,但不管如何,goto语句的确为程序员朋友们,在C语言中,有效运用异常处理思想来进行编程处理,提供了一种途径或简易的手段。当然,运用goto语句来进行异常处理编程已经成为历史。因为,在C语言中,早就已经提供了一种更加优雅的异常处理机制。去看看吧!继续!

阅读(946) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~