C庫巨集int setjmp(jmp_buf environment) 環境儲存當前的環境的函式longjmp().通過以後使用到環境變數。如果該巨集直接從巨集呼叫返回,返回零,但如果它返回 longjmp().函式呼叫,那麼返回的值傳遞給longjmp的第二個引數。
以下是宣告的setjmp()巨集。
int setjmp(jmp_buf environment)
environment -- 這是jmp_buf型別的儲存環境的資訊,其中的物件。
這個巨集可以返回不止一次。第一次其直接呼叫,它總是返回為零。當呼叫longjmp的設定環境的資訊,的巨集再次返回;現在它返回的值傳遞給longjmp的第二個引數。
下面的例子顯示了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, "yiibaistw511.com"); }
讓我們編譯和執行上面的程式,這將產生以下結果:
Jump function call Returned from a longjmp() with value = yiibaistw511.com