C 庫函數 - longjmp()

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

描述

C 庫函數 void longjmp(jmp_buf environment, int value) 恢復最近一次調用 setjmp() 宏時保存的環境,jmp_buf 參數的設置是由之前調用 setjmp() 生成的。

聲明

下麵是 longjmp() 函數的聲明。

void longjmp(jmp_buf environment, int value)

參數

  • environment -- 這是一個類型為 jmp_buf 的對象,包含了調用 setjmp 時存儲的環境資訊。
  • value -- 這是 setjmp 運算式要判斷的值。

返回值

該函數不返回任何值。

實例

下麵的實例演示了 longjmp() 函數的用法。

#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>