C异常处理实现(精).doc

C异常处理实现(精).doc

ID:48453827

大小:120.50 KB

页数:16页

时间:2020-01-31

C异常处理实现(精).doc_第1页
C异常处理实现(精).doc_第2页
C异常处理实现(精).doc_第3页
C异常处理实现(精).doc_第4页
C异常处理实现(精).doc_第5页
资源描述:

《C异常处理实现(精).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、.word可编辑.C异常处理实现:setjmp和longjmp此文为internet上选摘,过后我会用自己的理解补充此文。------------将对setjmp与longjmp的具体使用方法和适用的场合,进行一个非常全面的阐述。另外请特别注意,setjmp函数与longjmp函数总是组合起来使用,它们是紧密相关的一对操作,只有将它们结合起来使用,才能达到程序控制流有效转移的目的,才能按照程序员的预先设计的意图,去实现对程序中可能出现的异常进行集中处理。与goto语句的作用类似,它能实现本地的跳转这种情况容易理解,不过还是列举出

2、一个示例程序吧!如下:voidmain(void){intjmpret;jmpret=setjmp(mark);if(jmpret==0).专业.专注..word可编辑.{//其它代码的执行//判断程序远行中,是否出现错误,如果有错误,则跳转!if(1)longjmp(mark,1);//其它代码的执行//判断程序远行中,是否出现错误,如果有错误,则跳转!if(2)longjmp(mark,2);//其它代码的执行//判断程序远行中,是否出现错误,如果有错误,则跳转!if(-1)longjmp(mark,-1);//其它代码的执

3、行}else{//错误处理模块switch(jmpret){case1:printf("Error1"n");.专业.专注..word可编辑.break;case2:printf("Error2"n");break;case3:printf("Error3"n");break;default:printf("UnknownError");break;}exit(0);}return;}  上面的例程非常地简单,其中程序中使用到了异常处理的机制,这使得程序的代码非常紧凑、清晰,易于理解。在程序运行过程中,当异常情况出现后,控制流是

4、进行了一个本地跳转(进入到异常处理的代码模块,是在同一个函数的内部),这种情况其实也可以用goto语句来予以很好的实现,但是,显然setjmp与longjmp的方式,更为严谨一些,也更为友善。程序的执行流如图17-1所示。.专业.专注..word可编辑.setjmp与longjmp相结合,实现程序的非本地的跳转呵呵!这就是goto语句所不能实现的。也正因为如此,所以才说在C语言中,setjmp与longjmp相结合的方式,它提供了真正意义上的异常处理机制。其实上一篇文章中的那个例程,已经演示了longjmp函数的非本地跳转的场景

5、。这里为了更清晰演示本地跳转与非本地跳转,这两者之间的区别,我们在上面刚才的那个例程基础上,进行很小的一点改动,代码如下:.专业.专注..word可编辑.voidFunc1(){//其它代码的执行//判断程序远行中,是否出现错误,如果有错误,则跳转!if(1)longjmp(mark,1);}voidFunc2(){//其它代码的执行//判断程序远行中,是否出现错误,如果有错误,则跳转!if(2)longjmp(mark,2);}voidFunc3(){//其它代码的执行//判断程序远行中,是否出现错误,如果有错误,则跳转!if

6、(-1)longjmp(mark,-1);}.专业.专注..word可编辑.voidmain(void){intjmpret;jmpret=setjmp(mark);if(jmpret==0){//其它代码的执行//下面的这些函数执行过程中,有可能出现异常Func1();Func2();Func3();//其它代码的执行}else{//错误处理模块switch(jmpret).专业.专注..word可编辑.{case1:printf("Error1"n");break;case2:printf("Error2"n");break

7、;case3:printf("Error3"n");break;default:printf("UnknownError");break;}exit(0);}return;}回顾一下,这与C++中提供的异常处理模型是不是很相近。异常的传递是可以跨越一个或多个函数。这的确为C程序员提供了一种较完善的异常处理编程的机制或手段。.专业.专注..word可编辑.setjmp和longjmp使用时,需要特别注意的事情1、setjmp与longjmp结合使用时,它们必须有严格的先后执行顺序,也即先调用setjmp函数,之后再调用longjm

8、p函数,以恢复到先前被保存的“程序执行点”。否则,如果在setjmp调用之前,执行longjmp函数,将导致程序的执行流变的不可预测,很容易导致程序崩溃而退出。请看示例程序,代码如下:classTest{public:Test()~Test()}obj;//注意

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。