C++程序设计ch13程序设计防错.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2解决错误 解决编译错误 编译错一般都是语法错误,比如: 写掉了行尾的;号 把英文的;号写成了汉字的;号 括号没有配对 类型名称,变量名称,函数名称,头文件名称键入错了等等。 一般情况下,编译器给出的编译错误都是描述性的,根据其描述的内容查找到指定的代码行纠正语法错误就可以了。 一般总是先解决第一个编译错指定的代码行,然后再编译。如果还有编译错,以此循环,直至消除全部编译错。 2解决错误 解决链接错误 链接错误的原因很少,一般就3种情况: 函数定义和函数声明不对应(一般是因为函数名键入错了) 全局变量进行了声明和使用,但没有定义(前面加extern是全局变量的声明,而不是定义) 没有链接需要的库(标准库是自动链接的,但其它的库,比如提供网络通信功能的库就需要告诉IDE库的名称和路径才能实现链接) 2解决错误 解决运行时错误 通过一套完整的错误检查,报告与处理机制来解决运行时错误 解决逻辑错误 通过调试和测试手段来解决逻辑错误 4 异常 4.1 异常的作用 函数防错的基本原则是函数负责检测和报告错误,调用函数处理错误 C语言通常使用返回值和全局错误变量的方法,工业强度级的软件系统,每调用一个函数都要在后面跟上一大堆if-elseif-else语句来检测调用过程中是否出现了错误,过多的错误处理代码常常淹没了真正起核心作用的业务函数的调用代码 C++通过引入异常机制,将正常调用函数和对错误进行处理的代码严格分开,提高了程序的可读性和可维护性 4.1 异常的作用 函数抛出异常 函数负责检测和报告异常。 当函数中出现异常后,由函数抛出异常。 抛出异常的语法: 4.1 异常的作用 4.1 异常的作用 抛出异常以后 函数中,执行到抛出异常的语句就和执行到return语句一样,函数出栈,所有局部变量析构,如果函数中动态分配了内存或其它资源没有释放就会产生内存泄漏 C++编程建议,类应该在构造函数中动态分配内存或资源,在析构函数中释放 函数抛出异常出栈以后,与return不同,代码并不是回到调用函数的地方,而是跳转到捕获该异常的代码处,如果该异常没有被捕获,程序就会自动终止(异常终止) 4.2 标准异常 4.2 标准异常 exception的派生类分为3类: 语言核心的异常,直接派生自exception。 包括bad_alloc, bad_cast, bad_typeid, bad_exception。 这些异常由运行时抛出,用户程序不应抛出这些异常。 逻辑异常,派生自logic_error。 表示程序运行中出现了逻辑错误(表示程序有bug)。 包括 length_error(长度过长), domain_error(专业领域范围内的错误), out_of_range(下标访问越界), invalid_argument(无效参数)。 还有一个ios_base::failure(直接派生自exception),表示I/O过程中出现了错误。 运行异常,派生自runtime_error。 表示运行中遇到了不可预知的运行错误。 包括range_error(内部运算超出数据类型范围), overflow_error(算术运算上溢), underflow_error(算术运算下溢)。 运行异常也由运行时抛出,用户程序不抛出这些异常。 4.3实现自己的异常 4.3实现自己的异常 4.4 捕获异常 4.4 捕获异常 catch接收一个异常类型变量作为参数,可以是普通类型,也可以是引用类型。为保证what()执行的多态效果,最好用引用类型。 catch块的处理通常比较简单,打印异常变量提供的信息,然后返回或退出程序。 一个try块可以后接多个catch块 捕捉最特化的异常类放在最前面 越泛化的异常类放在后面 最后一个catch块用…号表示捕捉所有未指定的异常。 4.4 捕获异常 3.1报告错误(Error report) 使用哪种方式报告错误 一般的区分原则是: 函数返回值表示函数执行过程中可以预见到的不正常情况,比如文件打不开,数据库连不上,给sqrt一个负数参数等等。errno只是函数返回值的替代方案(找不到一个合适的返回值表示错误) assert用于检查完全不应该发生的情况(比如给指针参数提供一个空指针) assert宏只用于调试版本,而在发行版本中不起作用 assert宏实际上是用来防止程序中出现的bug。 异常主要用于编程时无法预见的运行时错误。如网络连接中断,硬盘耗尽等。 以上原则并不是强制性的,4种方法都可以用。 一般C程序习惯用前3种 C++程序习惯用后2种,并且以抛出异常为主要的错误报告方式,返回值只在函数正常执行完成时才有用。 Page * 3.2函数的前置条件与后置条件 每个函数总是包含输入,处理和输出3个部分。 函数对输

文档评论(0)

东方888 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档