函數原型 int setjmp(jmp_buf env)
setjmp參數env的類型是一個特殊類型jmp_buf。這一數據類型是某種形式的數組,其中存放:在調用longjmp時能用來恢復棧狀態的所有信息。因為需要在另一個函數中引用env變量,所以規范的處理方式是將env變量定義為全局變量。setjmp函數初次啟用時返回 0 值。
函數原型 void longjmp(jmp_buf env, int val)
longjmp函數的中參數env是由setjmp函數所保存的堆棧環境、參數val設置setjmp函數的返回值。longjmp函數本
身是沒有返回值的,它執行跳轉到保存env參數的setjmp函數調用,並由setjmp函數調用返回,此時setjmp函數的
返回值就是 val 。
#include <setjmp.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> int j = 0; jmp_buf env; int main () { int i, k=0; // setjmp函數用於設置跳轉的目的堆棧情況,直接調用該函數,則返回0,若由longjmp的調用, // 導致setjmp被調用,則返回val(longjmpd的第二個參數) // env保留了需要返回的位置的堆棧情況 i = setjmp(env); printf("setjmp=[%d];j=[%d];k=[%d]\n", i, j++, k++); if (j > 5) exit(0); sleep(1); // 進行跳轉 longjmp(env, j); return 0; }執行截圖