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 处理。跳过的函数中若含未释放资源,可能泄漏。