函式定義在setjmp.h中。
int setjmp(jmp_buf buf);
setjmp函式用緩衝區buf儲存系統堆疊的內容,以便後續的longjmp函式使用。setjmp函式初次啟用時返回0。
void longjmp(jmp_buf buf, int val);
longjmp函式中的引數buf是由setjmp函式所儲存的堆疊環境,引數val設定setjmp函式的返回值。
longjmp函式本身是沒有返回值的,它執行後跳轉到儲存envbuf引數的setjmp函式呼叫,並由setjmp函式呼叫返回,此時setjmp函式的返回值就是val。
jmp_buf buf;
void func()
{
printf("跳轉並返回1\n");
longjmp(buf,1);
printf("已經回到main函式了,這裡到不了\n");
}
int main(int argc, char const *argv[])
{
int res = setjmp(buf);
if (res == 0)
{
printf("第一次\n");
func();
}
else if (res == 1)
{
printf("從longjmp函式跳轉回來\n");
}
return 0;
}
複製程式碼