C语言异常处理

本文探讨了C语言中的异常处理,介绍了异常与Bug的区别。异常是程序运行时的可预料执行分支,如除零错误、文件不存在或数组越界。而Bug则是未预期的程序错误,如使用野指针或未释放的堆数组。文章提到了C语言通过setjump和longjmp函数实现的异常恢复机制。
摘要由CSDN通过智能技术生成

C语言异常处理

异常的概念

  • 程序再运行过程中可能产生异常
  • 异常(Exception)与Bug的区别
    • 异常是程序运行时可预料的执行分支
    • Bug是程序中的错误,不是被预期的运行方式

异常与Bug的对比

  • 异常
    • 运行时产生除零的情况
    • 需要打开的外部文件不存在
    • 数组访问越界
  • Bug
    • 使用野指针
    • 堆数组使用结束后未释放
    • 选择排序无法处理长度为0的数组

函数

  • int setjump(jmp_buf env)
    • 将当前上下文保存再jmp_buf结构体中
  • void longjmp(jmp_buf env,int val)
    • 从jmp_buf结构体中恢复setjmp()保存上下文
    • 最终从setjmp函数调用点返回,返回值为val

#include <iostream>
#include <csetjmp>
using namespace std;

static jmp_buf env;

double divide(double a,double b)
{
    const double delta = 0.0000000000001;
    double ret = 0;
    if(!((-delta<b)&&(b<delta)))
    {
        ret = a/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值