性的最有效方法之一C语言实现出错处理的方法是

性的最有效方法之一C语言实现出错处理的方法是

ID:40463412

大小:212.61 KB

页数:77页

时间:2019-08-03

性的最有效方法之一C语言实现出错处理的方法是_第1页
性的最有效方法之一C语言实现出错处理的方法是_第2页
性的最有效方法之一C语言实现出错处理的方法是_第3页
性的最有效方法之一C语言实现出错处理的方法是_第4页
性的最有效方法之一C语言实现出错处理的方法是_第5页
资源描述:

《性的最有效方法之一C语言实现出错处理的方法是》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第九章异常处理程序的错误有两大类:①编译链接错误:这类错误是由程序的语法错误(例如关键字错误、变量未定义、语句结束缺分号、括号失配、结构失配等)和其他错误(函数只声明未定义、缺少库的链接配置等)引起的。这类程序错误发生在程序的编译链接过程中,对于一个具有一定经验的编程人员是容易解决的。②运行错误:这类程序错误发生在程序的运行期间,主要表现在计算过程中的被0除、内存空间不足、数据的输入输出错误等。这类程序错误只靠编程人员的经验是难以避免的。错误修复技术是解决程序运行错误,提高代码健壮性的最有效方法之一。C语言实现出错处理的方法是出错与错误处

2、理的紧耦合,即检查被调函数的返回值或输出信息,以便确定是否发生错误,作出相应的处理。这种出错处理存在两个主要问题:出错处理的繁琐和错误检查引起的代码膨胀将不可避免地降低程序的执行效率,增加程序的阅读困难。被调用函数只清楚出错原因而不清楚被调用环境,因此缺乏处理错误的依据。因此这种将用户函数与出错处理紧密结合的方法将造成使用出错处理的不方便和难以接受。正是因为上述原因,使得不少程序设计人员在实际设计中常常“忽略”出错处理,似乎是在“不会出错”的状态下编程,这会严重地降低程序代码的健壮性。异常处理是C++语言的一个重要特征,它提出了出错处

3、理更加完美的方法。出错处理代码的编写不再繁琐,也不须将出错处理代码与功能代码紧密结合。在可能发生错误的函数中加入出错代码,并在后面调用该函数的程序中加入错误处理代码。如果程序中多次调用一个函数,可以在程序中加入一个专门用于被调函数的出错处理函数。错误发生是不会被忽略的。如果被调用函数需发送一条出错信息给调用函数,它可向调用环境发送一个描述错误信息的对象。如果调用环境没有捕获该错误信息对象,则该错误信息对象会被自动向上一层的调用环境发送;如果调用环境无法处理该错误信息对象,则调用环境可以将该错误信息对象主动发送到上一层的调用环境中;直到

4、该错误信息对象被捕捉和处理。9.1C语言的出错处理在通过对被调用函数的返回或对断言宏assert()的判断结果的检查能够确切定后续操作的情况下,出错处理就变得十分明确和容易了,因为可以通过程序执行的当前运行环境得到所有必要的信息。然而能够这样处理的错误都是环境一般都是简单的普通错误。如果错误问题发生时,在程序当前运行环境中无法获得足够的错误发生和处理的信息,则需要从更大的运行环境中获取出错处理信息。C语言处理这类错误情况的典型方法有三种:⑴出错信息可以通过函数的返回值获得。如果返回值不足以描述出错信息,则可设置全局错误判断标志(标准C语言

5、中全局变量errno以及系统运行库函数perror(constchar*string)、strerror(interrnum)支持这一方法)。由于这种方法要对每个函数调用都进行错误检查,这将十分繁琐并增加程序的混乱度。另外,偶然出现异常的函数返回值可能并不反映什麽问题。⑵可使用C信号处理库中的signal函数设置中断信号处理,和使用raise函数向正在运行的程序发送信号。这两个函数的原型如下:void(*signal(intsig,void(__cdecl*func)(intsig[,intsubcode])))(intsig);intr

6、aise(intsig);信号处理库的使用者必须清楚地了解、恰当地定义和设置中断信号处理。同时对于大型项目,不同库之间的信号可能会产生冲突。因此,信号处理库的使用有一定的难度。⑶使用C标准库中的设置跳转函数setjmp和非局部跳转函数longjmp实现出错和错误处理。这两个函数的原型如下:setjmp(jmp_bufenv);longjmp(jmp_bufenv,intvalue);调用setjmp函数在程序中存储一典型的正常状态,如果进入错误状态,longjmp可恢复由setjmp函数所设定的状态,并且状态被恢复时的存储地点与错误发生地

7、点紧密联系。在较早的VisualC++版本(例如VC++6.0)中C语言的信号处理技术和setjmp/longjmp函数被调用时不能正确地调用类对象的析构函数,所以一个描述出错信息的对象不能被正确地清除。如果出错对象不能被清除,则该对象将被保留下来且不能再次被正确地存取,因此,实际上是不可能有效、正确地从异常情况中恢复。所以在C++编程中不推荐使用C语言中这种处理出错的方法。例9-1描述了setjmp/longjmp函数的这一特点。在VC++6.0中的运行结果:tornado,witch,munchkins...there'snoplac

8、elikehomethere'snoplacelikehomethere'snoplacelikehomerainbow()iscalled.AuntieEm!Ihadthestrangest

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

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

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