异常的概念
-程序在运行过程中可能产生异常
-异常(Exception)与Bug的区别
异常是程序运行时可预料的执行分支
Bug是程序中的错误,是不被预期的运行方式
异常(Exception)和Bug的对比
-异常
运行时产生除0的情况
需要打开的外部文件不存在
数组访问时越界
-Bug
使用野指针
堆数组使用结束后未释放
选择排序无法处理长度为0的数组
C语言经典处理方式:if ...else ...
void func(...)
{
if(判断是否产生异常)
{
正常情况代码逻辑;
}
else
{
异常情况代码逻辑;
}
}
#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; }
缺陷
-divide函数有3个参数,难以理解其用法
-divide函数调用后必须判断valid代表的结果
当valid为true时,运算结果正常
当valid为false时,运算过程出现异常