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 块捕获并处理。

相关推荐
大数据张老师4 分钟前
Typora 导出 Word 模版操作手册
开发语言·c#·word·typora
略略略咯咯8 分钟前
stream流浅拷贝
开发语言·python
long31610 分钟前
Java 团队入门到精通学习资料
java·开发语言
城管不管22 分钟前
rabbitmq如何保证消息不丢失?解决方案又是什么?
开发语言·ai·面试·职场和发展·rabbitmq·php·agent
程序员良辰23 分钟前
【TongWeb7】启动接近两分钟问题排查
java·开发语言·中间件
深色風信子25 分钟前
Kotlin Bytedeco OpenCV 图像图像58 无缝克隆
开发语言·opencv·kotlin·bytedeco
朝阳3936 分钟前
react19【系列实用教程】实用组件封装
开发语言·前端·javascript
我是苏苏44 分钟前
C#基础:使用System.Speech.Synthesis离线播放/朗读文字内容
开发语言·c#
Nebula嵌入式1 小时前
【C语言】01-从零开始:编译运行与第一个程序
c语言·嵌入式
Patrick在香港1 小时前
Python依赖管理从踩坑到选型:pip/poetry/uv四种方案全面实测
开发语言·python·数据分析·scikit-learn·ai编程·pip·uv