C語言的異常處理
阿新 • • 發佈:2019-05-14
使用 結構體 內容 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語言的異常處理