setjmp函式和longjmp函式

2021-06-16 19:21:41 字數 406 閱讀 8070

這兩個函式是為了解決深層次函式巢狀返回的問題。

函式原型:

#include

int setjmp(jmp_buf env);

返回值:若直接呼叫則返回0,若從longjmp呼叫返回則返回非0值。

void longjmp(jmp_buf env, int val);

在希望返回的位置呼叫setjmp,引數env通常會被定義成乙個全域性變數。在呼叫longjmp函式時,longjmp的第乙個引數是在呼叫setjmp時所用的env;第二個引數是非0的val,它將成為從setjmp處返回的值。

注意:不存放在儲存器中的變數將具有longjmp時的值,而在cpu和浮點暫存器中的變數則恢復為呼叫setjmp時的值。全域性、靜態、易失變數不受優化的影響,在呼叫longjmp之後,它們的值是最近所呈現的值。

跳轉函式 setjmp 和 longjmp

setjmp 和 longjmp 是一對跳轉函式,也是神一樣的函式,這種函式比goto都強大,但功能跟goto差不多 既然,規範裡要求不能使用goto,所以setjmp 和 longjmp 這個也基本不用。當然,前提特殊情況下是可以的。例如特殊處理,實現自己的異常處理 關於 setjmp 和 lon...

setjmp和longjmp函式使用詳解

setjmp和longjmp函式使用詳解 wykwdy007的專欄 部落格頻道 csdn.net 非區域性跳轉語句 setjmp和longjmp函式。非區域性指的是,這不是由普通c語言goto,語句在乙個函式內實施的跳轉,而是在棧上跳過若干呼叫幀,返回到當前函式呼叫路徑上的某乙個函式中。includ...

setjmp和longjmp函式使用詳解

非區域性跳轉語句 setjmp和longjmp函式。非區域性指的是,這不是由普通c語言goto,語句在乙個函式內實施的跳轉,而是在棧上跳過若干呼叫幀,返回到當前函式呼叫路徑上的某乙個函式中。include int setjmp jmp buf env 返回值 若直接呼叫則返回0,若從longjmp呼...