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

相关推荐
波力海苔夹心脆6754 分钟前
C# 值类型与引用类型详解:存储位置、赋值机制、参数传递、相等比较、装箱拆箱与常见陷阱
开发语言·jvm·经验分享·笔记·c#·.net
m0_3807438713 分钟前
Qt中导航栏实现的详细指南
开发语言·c++
mhmh12319 分钟前
Python 对象模型与数据模型:魔术方法、描述符与元类深度解析
开发语言·python
估值探索者24 分钟前
【Python量化策略实战 #02】多因子合成mom和vol两因子打分合成
开发语言·c++·python·数据挖掘·c#
思麟呀25 分钟前
位运算:从一个整数到一个集合
c语言·数据结构·c++·算法
m0_380743871 小时前
PHP7.3和7.2字符串功能有什么不同
开发语言·php
SuperByteMaster2 小时前
低功耗GPIO引脚配置
c语言
m0_380743872 小时前
PHP 8.4的新语法怎么用才规范
开发语言·php
阿狗童鞋2 小时前
Java并发编程实战指南
java·开发语言
phltxy2 小时前
C 语言自定义类型:结构体、位段、枚举与联合体
c语言·开发语言