C语言异常处理
异常的概念
- 程序再运行过程中可能产生异常
- 异常(Exception)与Bug的区别
- 异常是程序运行时可预料的执行分支
- Bug是程序中的错误,不是被预期的运行方式
异常与Bug的对比
- 异常
- 运行时产生除零的情况
- 需要打开的外部文件不存在
- 数组访问越界
- Bug
- 使用野指针
- 堆数组使用结束后未释放
- 选择排序无法处理长度为0的数组
函数
- int setjump(jmp_buf env)
- 将当前上下文保存再jmp_buf结构体中
- void longjmp(jmp_buf env,int val)
- 从jmp_buf结构体中恢复setjmp()保存上下文
- 最终从setjmp函数调用点返回,返回值为val
#include <iostream>
#include <csetjmp>
using namespace std;
static jmp_buf env;
double divide(double a,double b)
{
const double delta = 0.0000000000001;
double ret = 0;
if(!((-delta<b)&&(b<delta)))
{
ret = a/