- 第六十三课 C语言中的异常处理
- 一、异常的概念
- 二、异常和bug的对比
- 三、setjmp和longjmp
- 四、小结
-
程序在运行过程中可能产生异常
-
异常(Exception)与Bug的区别
异常是程序运行时可预料的执行分支
bug 是程序中的错误,是不被预期的运行方式
-
异常
运行时除0的情况
需要打开外部文件不存在
数组访问越界
-
bug
使用野指针
堆数组数用结束后未释放
选择排序无法处理长度为0的数组
| 函数 | int setjmp(imp_buf env) | void longjmp(jmp_buf, int val) |
|---|---|---|
| 作用 | 将当前上下文保存在jmp_buf结构体中 | 从jmp_buf结构体中回复setjmp保存的上下文 最终从setjmp函数调用点返回,返回值为val |
缺陷:
- 必然涉及到使用全局变量
- 暴力跳转导致代码可读性降低
- 本质还是 if…else…异常处理方式
- 程序在不可避免地会发生异常
- 异常是在开发阶段就可以预见的运行时的问题
- C语言通过经典的if…else…方式处理异常



