C 庫宏 - setjmp()

C 標準庫 - <setjmp.h> C 標準庫 - <setjmp.h>

描述

C 庫宏 int setjmp(jmp_buf environment) :創建本地的jmp_buf緩衝區並且初始化,用於將來跳轉回此處。這個副程式保存程式的調用環境於env參數所指的緩衝區,env將被longjmp使用。如果是從setjmp直接調用返回,setjmp返回值為0。如果是從longjmp恢復的程式調用環境返回,setjmp返回非零值。

聲明

下麵是 setjmp() 宏的聲明。

int setjmp(jmp_buf environment)

參數

  • environment -- 這是一個類型為 jmp_buf 的用於存儲環境資訊的對象。

返回值

這個宏可能不只返回一次。第一次,在直接調用它時,它總是返回零。當調用 longjmp 時帶有設置的環境資訊,這個宏會再次返回,此時它返回的值會傳給 longjmp 作為第二個參數。

實例

下麵的實例演示了 setjmp() 宏的用法。

實例

#include <stdio.h> #include <setjmp.h> static jmp_buf buf; void second(void) { printf("second\n"); // 列印 longjmp(buf,1); // 跳回setjmp的調用處 - 使得setjmp返回值為1 } void first(void) { second(); printf("first\n"); // 不可能執行到此行 } int main() { if ( ! setjmp(buf) ) { first(); // 進入此行前,setjmp返回0 } else { // 當longjmp跳轉回,setjmp返回1,因此進入此行 printf("main\n"); // 列印 } return 0; }

讓我們編譯並運行上面的程式,這將產生以下結果:

second
main

C 標準庫 - <setjmp.h> C 標準庫 - <setjmp.h>