C語言錯誤處理——setjmp & longjmp
C語言沒有像Java那樣的try catch處理異常錯誤的能力,不過可以用setjmp和longjmp兩個函數(shù)實現(xiàn)錯誤處理的基本邏輯。 #include <setjmp.h> jmp_buf BUFFER; longjmp(BUFFER, n)將程序流跳到setjmp的位置,同時恢復(fù)BUFFER中保存的狀態(tài)。第二個參數(shù)n為一個整數(shù),當通過longjmp(BUFFER, n)跳轉(zhuǎn)到setjmp位置時,setjmp函數(shù)的返回值為n;否則,如果是直接執(zhí)行setjmp,則返回為零。根據(jù)這個特性,可以將整數(shù)n視為錯誤代碼,這樣在執(zhí)行 setjmp(BUFFER) 會就可以知道是哪一種錯誤被觸發(fā)了。 一個小例子如下: #include <stdio.h> #include <setjmp.h> jmp_buf BUFFER; void handle_error() { int err_code = setjmp(BUFFER); if(err_code != 0) { printf("Error code: %d\n", err_code); } } void trigger_error(int err_code) { longjmp(BUFFER, err_code); } int main() { handle_error(); trigger_error(1); trigger_error(2); return 0; } 在上面的代碼中,trigger_error觸發(fā)了兩個錯誤,都被handle_error捕獲到了,這是個簡單完整的錯誤處理的例子。由于保存運行狀態(tài)的BUFFER數(shù)組要在不同的函數(shù)中使用,因此BUFFER要聲明為全局變量,這是一個不太優(yōu)雅的地方。 轉(zhuǎn)自:http:///blog/?p=179
------------------------------------------------------------ 本文由WindTaiL在cnblogs中發(fā)布,轉(zhuǎn)載請注明出處 |
|