C语言的异常处理
Posted zsy12138
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; } return 0; }
以上是关于C语言的异常处理的主要内容,如果未能解决你的问题,请参考以下文章