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

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

  1. 1、本文档共77页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
性的最有效方法之1C语言实现出错处理的方法是

第九章 异常处理; 程序的错误有两大类: ① 编译链接错误:这类错误是由程序的语法错误(例 如关键字错误、变量未定义、语句结束缺分号、括 号失配、结构失配等)和其他错误(函数只声明未 定义、缺少库的链接配置等)引起的。这类程序错 误发生在程序的编译链接过程中,对于一个具有一 定经验的编程人员是容易解决的。 ② 运行错误:这类程序错误发生在程序的运行期间, 主要表现在计算过程中的被0除、内存空间不足、数 据的输入输出错误等。这类程序错误只靠编程人员 的经验是难以避免的。; 错误修复技术是解决程序运行错误,提高代码健壮 性的最有效方法之一。C 语言实现出错处理的方法是 出错与错误处理的紧耦合,即检查被调函数的返回值 或输出信息,以便确定是否发生错误,作出相应的处 理。这种出错处理存在两个主要问题: ? 出错处理的繁琐和错误检查引起的代码膨胀将不可避 免地降低程序的执行效率,增加程序的阅读困难。 ? 被调用函数只清楚出错原因而不清楚被调用环境,因 此缺乏处理错误的依据。因此这种将用户函数与出 错处理紧密结合的方法将造成使用出错处理的不方 便和难以接受。; 正是因为上述原因,使得不少程序设计人员在实际 设计中常常 “忽略” 出错处理,似乎是在 “不会出错” 的 状态下编程,这会严重地降低程序代码的健壮性。 异常处理是 C++ 语言的一个重要特征,它提出了出 错处理更加完美的方法。 ? 出错处理代码的编写不再繁琐,也不须将出错处理代 码与功能代码紧密结合。在可能发生错误的函数中 加入出错代码,并在后面调用该函数的程序中加入 错误处理代码。如果程序中多次调用一个函数,可以在程序中加入一个专门用于被调函数的出错处理 函数。;? 错误发生是不会被忽略的。如果被调用函数需发送 一条出错信息给调用函数,它可向调用环境发送一 个描述错误信息的对象。如果调用环境没有捕获该 错误信息对象,则该错误信息对象会被自动向上一 层的调用环境发送;如果调用环境无法处理该错误 信息对象,则调用环境可以将该错误信息对象主动 发送到上一层的调用环境中;直到该错误信息对象 被捕捉和处理。;9.1 C 语言的出错处理 在通过对被调用函数的返回或对断言宏 assert() 的判 断结果的检查能够确切定后续操作的情况下,出错处 理就变得十分明确和容易了,因为可以通过程序执行 的当前运行环境得到所有必要的信息。然而能够这样 处理的错误都是环境一般都是简单的普通错误。 如果错误问题发生时,在程序当前运行环境中无法 获得足够的错误发生和处理的信息,则需要从更大的 运行环境中获取出错处理信息。C 语言处理这类错误 情况的典型方法有三种:;⑴ 出错信息可以通过函数的返回值获得。如果返回值 不足以描述出错信息,则可设置全局错误判断标志 (标准 C 语言中全局变量 errno 以及系统运行库函 数 perror(const char *string) 、strerror(int errnum) 支持这 一方法)。由于这种方法要对每个函数调用都进行错 误检查,这将十分繁琐并增加程序的混乱度。另 外,偶然出现异常的函数返回值可能并不反映什麽 问题。;⑵ 可使用 C 信号处理库中的 signal 函数设置中断信号 处理,和使用 raise 函数向正在运行的程序发送信 号。这两个函数的原型如下: void(*signal(int sig, void(__cdecl *func)(int sig[, int subcode])) ) (int sig); int raise( int sig ); 信号处理库的使用者必须清楚地了解、恰当地定义 和设置中断信号处理。同时对于大型项目,不同库 之间的信号可能会产生冲突。因此,信号处理库的 使用有一定的难度。;⑶ 使用 C 标准库中的设置跳转函数 setjmp 和非局部跳 转函数 longjmp 实现出错和错误处理。这两个函数 的原型如下: setjmp(jmp_buf env); longjmp(jmp_buf env, int value); 调用 setjmp 函数在程序中存储一典型的正常状态, 如果进入错误状态,longjmp 可恢复由 setjmp 函数所 设定的状态,并且状态被恢复时的存储地点与错误 发生地点紧密联系。; 在较早的 Visual C++ 版本(例如 VC++ 6.0)中 C 语 言的信号处理技术和 setjmp/longjmp 函数被调用时不能 正确地调用类对象

文档评论(0)

wuyoujun92 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档