C语言的异常处理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语⾔的异常处理
异常:异常(Exception)是可预料的执⾏分⽀,bug是不可被预料的执⾏分⽀
异常:除以0,数组访问越界。

bug: 使⽤野指针,申请内存没有释放。

C语⾔异常处理⽅法:
int setjump(jmp_buf env) :将上下⽂保存在jmp_buf结构体
void longjump(jmp_buf env , int val) :从jmp_buf结构体中恢复setjump()保存的上下⽂。

最终从setjmp()函数调⽤点返回,返回值为val。

破坏了C语⾔的执⾏顺序
#include <iostream>
#include <string>
#include <csetjmp>
using namespace std;
static jmp_buf env; // 定义上下⽂保存变量
double divide(double a, double b)
{
const double delta = 0.000000000000001;
double ret = 0;
if( !((-delta < b) && (b < delta)) )
{
ret = a / b;
}
else
{
longjmp(env, 1); // 根据env的内容恢复程序上下⽂,也就是跳到setjmp那⾥,再将setjmp()返回值设置为1
}
return ret;
}
int main(int argc, char *argv[])
{
if( setjmp(env) == 0 ) // 将当前程序上下⽂保存到env⾥⾯,直接setjmp调⽤返回指为0
{
double r = divide(1, 0);
cout << "r = " << r << endl;
}
else
{
cout << "Divided by zero..." << endl;
}
return0;
}。

相关文档
最新文档