C语言异常处理就机制setjmp()和longjmp()

C语言setjmp()和longjmp()实现异常处理机制。

setjmp() 用于保存当前的程序执行状态。

longjmp() 用于在后面的某个时刻返回到setjmp()点的状态。

类似goto。但goto是本地的,只能在函数内部跳转。

setjmp()和longjmp()是非局部跳转语句,可在调用栈上,返回到调用路径上的某一个函数中。

头文件<setjmp.h>

复制代码
#include <stdio.h>
#include <setjmp.h>
 
static jmp_buf buf;
 
void otherfunction(void) {
    printf("some error\n");       
    longjmp(buf,1);             // 跳回setjmp的调用处 - 使得setjmp返回值为1
}
 
void deal(void) {
    otherfunction();
    printf("deal done\n");
}
 
int main() {   
    if ( ! setjmp(buf) ) { // 设置成功,第一次返回0,longjmp后返回1
        deal();                
    } else {                  
        printf("catch error\n");  
    }
 
    return 0;
}

输出

复制代码
some error
catch error

在C++中,setjmp 和 longjmp 通常不被推荐使用。

因为C++提供了更强大和类型安全的异常处理机制,即 try, catch, 和 throw 关键字。这些关键字允许你在代码中定义异常处理块,并在需要时抛出异常,由相应的 catch 块捕获并处理。

相关推荐
_upupup38 分钟前
异常(C++)
java·开发语言·jvm
霸道流氓气质1 小时前
ComfyUI 图像生成工作流完全指南:从节点编排到Java生产级图像生产实战
java·开发语言·人工智能
by209991 小时前
从 malloc/free 到 new/delete:真正理解 C++ 中的内存管理与对象生命周期
c语言·c++·经验分享·动态内存管理
额额额对了1 小时前
SPI通信
linux·c语言·汇编·单片机·嵌入式硬件·arm
ShyanZh2 小时前
【Python3基础】13-Python 常用设计模式
开发语言·python·设计模式
m0_380743872 小时前
Qt侧边栏布局的实现示例
开发语言·c++
zh_xuan2 小时前
c++ 23 std::out_ptr用法
开发语言·c++23·out_ptr
陆卿之2 小时前
Java对接DeepSeek
java·开发语言·人工智能
庄园特聘拆椅狂魔2 小时前
Java 后端转全栈的第一课:从前端项目搭建到技术选
java·开发语言·前端
Logic1012 小时前
C语言/数据结构位运算题解:异或XOR找出书柜中编号只出现一次的那一层——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质