全部博文(668)
分类:
2008-08-07 08:53:40
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语言中,早就已经提供了一种更加优雅的异常处理机制。去看看吧!继续!