//编码时防错 //assert的使用方法:在错误的发源地发现错误 #include<assert.h> double divide(int num1,int num2) { ?? ?assert(num2 != 0); ?? ?double result = (double)num1 / num2; ?? ?return result; } //abort()和exit(0) #include<cstdlib> void test1() { ?? ?int x = 1; ?? ?int y = 0; ?? ?if (y == 0) { ?? ??? ?cout << "y = 0" << endl; ?? ??? ?//abort(); ?? ??? ?exit(0);//结束程序 ?? ?} ?? ?else { ?? ??? ?cout << x / y << endl; ?? ?} } //手写 bool test2() { ?? ?int x = 1; ?? ?int y = 0; ?? ?if (y == 0) { ?? ??? ?cout << "y = 0" << endl; ?? ??? ?//abort(); ?? ??? ?exit(0);//结束程序 ?? ??? ?return false; ?? ?} ?? ?else { ?? ??? ?cout << x / y << endl; ?? ??? ?return true; ?? ?} }
//运行时防错方法:异常机制 //try catch throw #include<thread> double divid(int x,int y)throw(int) {//代表只能抛出int类型,无法抛出其他类型,尽量让括号中抛出像抛出的异常 ?? ?if (y == 0) { ?? ??? ?throw "s"; ?? ??? ?throw 123; ?? ?} ?? ?return x / y; } void test3() { ?? ?int x = 1; ?? ?int y = 0; ?? ?int resu = 0; ?? ?try ?? ?{ ?? ??? ?resu = divid(x, y);//如果不捕获异常那么操作系统会将整个代码停止掉,捕获异常那么操作系统只会将这部分有问题的代码停止掉 ?? ?} ?? ?catch (const std::exception&) ?? ?{ ?? ??? ?cout <<"b=0" << endl; ?? ?} ?? ?catch (...) { ?? ??? ?cout << "all" << endl; ?? ?} ?? ?cout << resu << endl; }
|