C 标准库 - <setjmp.h>

C 语言 longjmp() 函数用于跳回之前 setjmp 保存的执行环境,实现非本地跳转。

原型

void longjmp(jmp_buf env, int value);

setjmp 处会返回 value(非 0),可用于区分不同的跳转来源。

参数

  • env - setjmp 保存的 jmp_buf;
  • value - setjmp 处返回的非零值。

示例

#include <stdio.h>
#include <setjmp.h>

jmp_buf buf;

void func() {
    printf("进入 func\n");
    longjmp(buf, 1);  // 跳回 main 的 setjmp
}

int main() {
    if (setjmp(buf) == 0) {
        printf("调用 func 前\n");
        func();
    } else {
        printf("func 中发生跳转!\n");
    }
    return 0;
}

输出:

调用 func 前
进入 func
func 中发生跳转!

注意事项

value 传 0 时会被当作 1 处理。跳过的函数中若含未释放资源,可能泄漏。