C 庫宏 - setjmp()
描述
C 庫宏 int setjmp(jmp_buf environment) 把當前環境保存在變量 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; /* 保存 longjmp 的調用環境 */ val = setjmp( env_buffer ); if( val != 0 ) { printf("從 longjmp() 返回值 = %s\n", val); exit(0); } printf("跳轉函數調用\n"); jmpfunction( env_buffer ); return(0); } void jmpfunction(jmp_buf env_buf) { longjmp(env_buf, "w3cschool.cn"); }
讓我們編譯并運行上面的程序,這將產生以下結果:
跳轉函數調用 從 longjmp() 返回值 = w3cschool.cn