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

相关推荐
Data_Journal11 小时前
用于网页抓取的 Node-unblocker
大数据·开发语言·数据库·python·scrapy
豆角焖肉11 小时前
SSM 聚合项目搭建:多 Maven 模块项目
开发语言·python·pycharm
Frank_refuel11 小时前
【C++八股】面向对象
开发语言·c++
m0_3807438713 小时前
为 OpenAI 兼容接口配置教程
开发语言·python·node.js
M78佐菲13 小时前
c语言学习笔记:排序与查找方法整理
linux·c语言·笔记·学习·算法
万邦科技Lafite13 小时前
阿里巴巴拍立淘按图搜索商品API返回值实践:提升用户购物满意度的关键措施
开发语言·api·开放api·电商开放平台·京东开放平台
小小龙学IT14 小时前
Qt 6 跨平台开发完全指南:从信号槽机制到实际项目落地
开发语言·qt
leisoo809714 小时前
ig50数据落盘ClickHousevsTimescaleDBvsDuckDB实测对比 IG50免费开源股票数据API接口
开发语言·jvm·数据库·python·json
wWYy.14 小时前
C++与C的区别
c语言·c++
敢敢のwings15 小时前
智元 GO-2 与 AgiBot-World 深度解读
开发语言·后端·golang