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

相关推荐
Java小白笔记11 分钟前
Java中大数据实时归集与指标汇总方案
java·大数据·开发语言
随遇而安zx12 分钟前
【地基篇】---Java 8 JVM 知识大纲
java·开发语言·jvm
软件黑马王子21 分钟前
4.单例模式问题2:重复挂载
开发语言·单例模式·c#
quantdash_cc23 分钟前
批量请求和循环请求有什么区别?从 API 请求次数看量化数据获取的工程设计
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
qq_4069810329 分钟前
大白话rust系列01注释
开发语言·rust
橘子编程29 分钟前
Java邮件发送全攻略:从入门到实战
java·开发语言·spring boot·spring·spring cloud·maven
Tizzy JJ40 分钟前
Python + pytest 接口自动化测试框架实战:从零搭建企业级项目骨架
开发语言·python·pytest
海兰41 分钟前
【 Python 量化交易】第8章:量化工具箱
开发语言·python
牛油果子哥q42 分钟前
C++大型项目工程精讲:CMake完整实战、静态库&动态库、模块化拆分、单元测试、gdb调试、性能工具、工程踩坑全解
开发语言·c++·单元测试
Dream Cosmos44 分钟前
C++ 多态上篇:从 virtual 到抽象类,彻底理解多态的使用
开发语言·c++