linux系统编程:setjmp和longjmp函数用法
#include <stdio.h> #include <setjmp.h> //jmp_buf:数组,保存栈信息即运行环境 jmp_buf buf; double Divide(double a, double b) { if (b == 0.0) { longjmp(buf, 1); // throw } else return a / b; } //setjmp保存当前栈信息,成功返回0,当执行到longjmp时, //恢复栈信息即跳转到setjmp位置重新执行setjmp //且此次返回值根据longjmp函数参数给定 int main(void) { int ret; ret = setjmp(buf); if (ret == 0) // try { printf("division ...\n"); printf("%f\n", Divide(5.0, 0.0)); } else if (ret == 1) // catch { printf("divisiong by zero\n"); } return 0; }
运行结果:
division ...
divisiong by zero
其实上次错误处理模式已经是c++异常处理雏形
上述相当于:
#include <iostream> using namespace std; double Divide(double a, double b) { if (b == 0.0) { throw 1; // throw } else return a / b; } int main(void) { try // try { cout<<"division ..."<<endl; cout<<Divide(3.0, 0.0)<<endl; cout<<Divide(5.0, 0.0)<<endl; } catch (int) // catch { cout<<"divisiong by zero"<<endl; } return 0; }
运行结果同上
-----------------------我和我追猪的梦-----------------------------------------------------------------
作者:mickole

分类:
linux系统编程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具