国际访客建议访问 Primers 编程伙伴 国际版站点 > C 教程 > setjmp.h 以获得更好的体验。

# C 语言标准库头文件 setjmp.h

请查看 C 语言标准库头文件列表 了解更多相关 API。

这个头文件提供 非局部跳转 的相关功能,例如遇到错误时进行跳出。

# 类型

类型 标准 说明
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