C 標(biāo)準(zhǔn)庫 - <setjmp.h>
C 庫函數(shù) void longjmp(jmp_buf environment, int value) 恢復(fù)最近一次調(diào)用 setjmp() 宏時(shí)保存的環(huán)境,jmp_buf 參數(shù)的設(shè)置是由之前調(diào)用 setjmp() 生成的。
下面是 longjmp() 函數(shù)的聲明。
void longjmp(jmp_buf environment, int value)
environment -- 這是一個(gè)類型為 jmp_buf 的對象,包含了調(diào)用 setjmp 時(shí)存儲的環(huán)境信息。
value -- 這是 setjmp 表達(dá)式要判斷的值。
該函數(shù)不返回任何值。
下面的示例演示了 longjmp() 函數(shù)的用法。
#include <stdio.h>
#include <setjmp.h>
static jmp_buf buf;
void second(void) {
printf("second\n"); // 打印
longjmp(buf,1); // 跳回setjmp的調(diào)用處 - 使得setjmp返回值為1
}
void first(void) {
second();
printf("first\n"); // 不可能執(zhí)行到此行
}
int main() {
if ( ! setjmp(buf) ) {
first(); // 進(jìn)入此行前,setjmp返回0
} else { // 當(dāng)longjmp跳轉(zhuǎn)回,setjmp返回1,因此進(jìn)入此行
printf("main\n"); // 打印
}
return 0;
}讓我們編譯并運(yùn)行上面的程序,這將產(chǎn)生以下結(jié)果:
second main