c語言中的setjmp和longjmp簡介

2021-07-22 09:50:23 字數 661 閱讀 7981

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) called

a(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 則進行跳轉 丟...