1. 程式人生 > >C語言的異常處理

C語言的異常處理

使用 結構體 內容 double [] argv 指針 執行順序 順序

異常:異常(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語言的異常處理