C庫宏int setjmp(jmp_buf environment) 環(huán)境保存當(dāng)前的環(huán)境的函數(shù)longjmp().通過以后使用到環(huán)境變量。如果該宏直接從宏調(diào)用返回,返回零,但如果它返回 longjmp().函數(shù)調(diào)用,那么返回的值傳遞給longjmp的第二個(gè)參數(shù)。
以下是聲明的setjmp()宏。
int setjmp(jmp_buf environment)
environment -- 這是jmp_buf類型的存儲(chǔ)環(huán)境的信息,其中的對(duì)象。
這個(gè)宏可以返回不止一次。第一次其直接調(diào)用,它總是返回為零。當(dāng)調(diào)用longjmp的設(shè)置環(huán)境的信息,的宏再次返回;現(xiàn)在它返回的值傳遞給longjmp的第二個(gè)參數(shù)。
下面的例子顯示了setjmp()宏的用法。
#include <stdio.h> #include <stdlib.h> #include <setjmp.h> int main() { int val; jmp_buf env_buffer; /* save calling environment for longjmp */ val = setjmp( env_buffer ); if( val != 0 ) { printf("Returned from a longjmp() with value = %s ", val); exit(0); } printf("Jump function call "); jmpfunction( env_buffer ); return(0); } void jmpfunction(jmp_buf env_buf) { longjmp(env_buf, "yiibaisyiibai.com"); }
讓我們編譯和運(yùn)行上面的程序,這將產(chǎn)生以下結(jié)果:
Jump function call Returned from a longjmp() with value = yiibaisyiibai.com