# C 语言标准库头文件 setjmp.h
这个头文件提供 非局部跳转 的相关功能,例如遇到错误时进行跳出。
# 类型
| 类型 |
标准 |
说明 |
jmp_buf |
C89 |
用于跳转的执行上下文 |
| 宏 |
标准 |
说明 |
| setjmp |
C89 |
保存用于跳转的执行上下文 |
# 函数
| 函数 |
标准 |
说明 |
| longjmp |
C89 |
跳转到指定的执行上下文,跳转后无法返回 |
# 推荐阅读
# 示例
#include <stdio.h>
#include <setjmp.h>
#include <stdlib.h>
// 定义一个跳转缓冲区
jmp_buf jump_buffer;
void function_with_error(int condition) {
printf("进入可能出错的函数\n");
if (condition) {
printf("检测到错误条件,准备跳转\n");
// 跳转回setjmp的位置,并返回非0值
longjmp(jump_buffer, 1);
}
printf("正常执行完毕\n");
}
int main(void) {
// 设置跳转点
int ret = setjmp(jump_buffer);
if (ret == 0) {
printf("第一次调用setjmp,准备调用可能出错的函数\n");
function_with_error(0); // 正常调用
function_with_error(1); // 会触发跳转
} else {
printf("从longjmp返回,错误码: %d\n", ret);
printf("执行错误处理流程...\n");
}
printf("程序继续执行...\n");
// 另一个示例:模拟异常处理
if (setjmp(jump_buffer)) {
printf("捕获到异常\n");
} else {
printf("尝试执行可能抛出异常的代码\n");
// 模拟异常
longjmp(jump_buffer, 42);
}
return 0;
}
运行结果:
第一次调用setjmp,准备调用可能出错的函数
进入可能出错的函数
正常执行完毕
进入可能出错的函数
检测到错误条件,准备跳转
从longjmp返回,错误码: 1
执行错误处理流程...
程序继续执行...
尝试执行可能抛出异常的代码
捕获到异常
本文 更新于: 2025-11-27 09:38:06 创建于: 2025-11-27 09:38:06