科锐课堂笔记:2017/4/25 异常

来源:互联网 发布:php self this区别 编辑:程序博客网 时间:2024/06/06 02:19

  在C语言里没有异常的语法支持,所有的错误判断都是通过检测返回值,配合goto(短跳,函数内)或setjmp、longjmp(长跳)转移代码流程,分离业务逻辑和错误处理。C编译器还定义了一个全局变量errno,保存着C库函数发生的最后一次错误代码(成功不会修改其值)。


  C++新增了try、catch语法来用于异常处理,如果在try块中出现C++异常(用throw抛出,可以是基本类型也能是自定义类型),程序中断执行异常后的代码,转而查找与try匹配的各个catch()中参数类型相同的异常处理,catch(…)表示捕获所有异常类型。VC编译器把系统异常(如除0)也抛出捕获,Windows提供了一个默认异常处理,就是我们常见的弹出错误框,当查找不到匹配的异常处理便会执行windows默认异常。
  C++标准模板库(ATL)抛出的异常类型是exception类。try块中可以再嵌套try、catch处理,内层没有匹配就继续逐层向外匹配,直至最外层。对try块中的类对象,编译器在生成throw代码里使用建表记录,从而正确析构这些局部对象,但如果是系统异常使用SEH机制则这些对象就不会被析构了。所以在windows下要么自己使用SEH,要么使用微软对针SEH设计的非标准语法__try、__except、__finally才会觉得游刃有余。

0 0