C语言异常处理

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

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

C语言经典处理方式:if ...else ...
void func(...)
{
  if(判断是否产生异常)
  {
    正常情况代码逻辑;
  }
  else
  {
    异常情况代码逻辑;
  }
}

C语言异常处理
#include <iostream>
#include <string>

using namespace std;

double divide(double a, double b, int* valid)
{
    const double delta = 0.000000000000001;
    double ret = 0;
    
    if( !((-delta < b) && (b < delta)) )
    {
        ret = a / b;
        
        *valid = 1;
    }
    else
    {
        *valid = 0;
    }
    
    return ret;
}

int main(int argc, char *argv[])
{   
    int valid = 0;
    double r = divide(1, 0, &valid);
    
    if( valid )
    {
        cout << "r = " << r << endl;
    }
    else
    {
        cout << "Divided by zero..." << endl;
    }
    
    return 0;
}
C语言异常处理

缺陷
-divide函数有3个参数,难以理解其用法
-divide函数调用后必须判断valid代表的结果
  当valid为true时,运算结果正常
  当valid为false时,运算过程出现异常

上一篇:BigDecimal中divide方法详解


下一篇:【HDOJ6616】Divide the Stones(构造)