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

相关推荐
MSTcheng.10 分钟前
【C++】C++11新特性(二)
java·开发语言·c++·c++11
晓131313 分钟前
第七章 【C语言篇:文件】 文件全面解析
linux·c语言·开发语言
愚者游世13 分钟前
Delegating Constructor(委托构造函数)各版本异同
开发语言·c++·程序人生·面试·改行学it
梵刹古音15 分钟前
【C语言】 指针基础与定义
c语言·开发语言·算法
Ekehlaft19 分钟前
这款国产 AI,让 Python 小白也能玩转编程
开发语言·人工智能·python·ai·aipy
rit843249921 分钟前
MATLAB中Teager能量算子提取与解调信号的实现
开发语言·matlab
开源技术24 分钟前
Python GeoPandas基础知识:地图、投影和空间连接
开发语言·ide·python
Cult Of27 分钟前
Alicea Wind的个人网站开发日志(2)
开发语言·python·vue
我找到地球的支点啦32 分钟前
通信扩展——扩频技术(超级详细,附带Matlab代码)
开发语言·matlab
微小冷1 小时前
Rust异步编程详解
开发语言·rust·async·await·异步编程·tokio