C语言和C++都有一个专门为调试而准备的工具函数---assert函数。这个函数是在assert.h库文件里定义的。
实例1:assert函数应用
1 #include <cassert>
2 //assert()函数需要有一个参数,它将测试这个输入参数的真或者假状态
3 //如果为真 Do nothing
4 //如果为假 Do something
5 int main()
6 {
7 int i = 20;
8 assert( i == 65);//如果括号内为真,则过;假则中断程序
9
10 return 0;
11 }
同样为了对付潜在的编程错误(尤其是在运行时的错误),捕获异常是一种完全不同的方法。简单说,异常就是与预期不相符合的反常现象。
注:每条try语句至少要有一条配对的catch语句。必须定义catch语句以便让它接收一个特定类型的参数。
当某个try语句块里执行过throw语句,它后面的所有语句(截止到这个try语句块末尾)将永远不会被执行。
如果try语句块无法找到一个与之匹配的catch语句块,它抛出的异常将中止程序的执行。
实例2:捕获异常(try,catch,throw)
1 #include <iostream>
2 #include <climits>
3
4 using namespace std;
5 unsigned long returnFactorial(unsigned short num) throw(const char*);
6
7 int main()
8 {
9 unsigned short num = 0;
10 cout << "请输入一个整数:";
11 while( !(cin>>num) || (num < 1) )
12 {
13 cin.clear();//清楚状态
14 cin.ignore(100,'\n'); //清除缓存区
15 cout << "请输入一个整数:";
16 }
17 cin.ignore(100,'\n');
18 try
19 {
20 unsigned long factorial = returnFactorial(num);//如果异常,则抛出字符型的*e异常
21 //直接跳转到catch继续执行
22 cout << num << "的阶乘值是:" << factorial;
23 }
24 catch(const char *e)//如果正常则不执行,抛出异常则执行
25 {
26 cout << "error";
27 }
28 return 0;
29 }
30
31 unsigned long returnFactorial(unsigned short num) throw(const char*)
32 {
33 unsigned long sum = 1;
34 unsigned long max = ULONG_MAX;
35
36 for(int i = 1;i <= num; i++)
37 {
38 sum *= i;
39 max /= i;
40 }
41 if(max < 1)
42 {
43 throw"悲催。。。该基数太大,无法在该计算机计算求出阶乘值。\n";
44 }
45 else
46 {
47 return sum;
48 }
49 }