错误处理和调试2
让编程改变世界
Change the world by program
让函数返回错误代码
这种方式我们已经了然于心,但我们仍有进一步继续讨论的必要。
不知道大家还记不记得很久很久以前,我们一起写过的那个求阶乘的栗子:
factorial.cpp
其实这个栗子充满隐患,为什么?
我们输入13,从表面上看,程序既没有崩溃也没有报告出错,但它已经不正常了!
我们来看下13阶乘的正确结果是:
13!== 6,227,020,800
在知道问题后,我们其实也很容易的就可以猜到错误发生的原因:计算阶乘的值超出了计算机所能表达的最大整数(至少在我们这台机子上)。
鉴于这类问题的纠正,小甲鱼在这里教大家一个新技巧:运用 climits 头文件
climits 头文件?
这个头文件从 C 的 limits.h 头文件引用过来的。
主要列出了各种数据类型在给定操作系统上的取值范围,并且把每种数据类型的最大可取值和最小可取值都分别定义为一个常量供我们比较。
比如,SHORT_MAX 代表短整数类型在给定系统上的最大可取值,SHORT_MIN 代表短整数类型在给定操作系统上的最小可取值。
USHORT_MAX 代表无符号整数类型的最大可取值。
在这个程序里,为了判断阶乘计算的结果没有超出一个无符号长整数的最大取值,我们可以使用 ULONG_MAX 来提前获得这个值进行对比。
一起动手来修改这个代码:factorial2.cpp(
课件及源代码下载地址)
有些程序员喜欢使用异常(咱们将在稍后学习)而不是使用 return 语句。
反对使用这个栗子程序里所演示的技巧的主要理由是:把各种出错代码进行处理的语句混杂在程序的主干部分既不利于模块化编程,又容易干扰正常的思考!
[buy]
获得所有教学视频、课件、源代码等资源打包 [/buy]
[Downlink href='http://urlxf.qq.com/?yaeyQjq']视频下载[/Downlink]
[Downlink href='http://kuai.xunlei.com/d/LZTQOUUKQFZQ']备胎下载[/Downlink]