setjmp將當前程式的執行環境儲存在乙個jump_buf型別的全域性變數中(因為後續要被longjmp呼叫)
第一次呼叫setjmp的返回值是null
中後續的**中執行到longjmp以後,longjmp需要兩個引數,乙個是之前setjmp儲存到執行環境的全域性變數可以調整到setjmp函式
另乙個引數是setjmp函式的返回值,然後程式執行會跳轉到setjmp函式並返回longjmp的第二個引數
通常應將setjmp放在各種條件控制語句中if switch while等
乙個例子,參考dash文件
#include#include
#include
jmp_buf jump_buffer;
noreturn void a(
int count)
int main(
void
)
output:
a(0) calleda(1) called
a(2) called
a(3) called
a(4) called
a(5) called
a(6) called
a(7) called
a(8) called
C語言中的setjmp和longjmp
在c語言中,goto語句只能在乙個函式內實現跳轉,而不能在函式間進行跳轉。如果希望在函式間跳轉,可以使用 setjmp 和 longjmp 函式。linux 會把程序的上下文儲存在 task struct 結構體中,切換時直接恢復。而 setjmp 和 longjmp 的原理也差不多 第一次呼叫se...
C語言中的setjmp和longjmp函式
c語言的setjmp 異常處理與構建協作式多工系統 int setjmp jmp buf envbuf 巨集函式setjmp 在緩衝區envbuf中儲存系統堆疊裡的內容,供longjmp 以後使用,setjmp 必須使用標頭檔案setjmp.h。呼叫setjmp 巨集時,返回值為0,然而longjm...
c語言中setjmp與longjmp(2)
如何實現異常處理 首先設定乙個跳轉點 setjmp 函式可以實現這一功能 然後在其後的 中任意地方呼叫 longjmp 跳轉回這個跳轉點上,以此來實現當發生異常時,轉到處理異常的程式上,在其後的介紹中將介紹如何實現。setjmp 為跳轉返回儲存現場並為異常提供處理程式,longjmp 則進行跳轉 丟...