
上QQ阅读APP看书,第一时间看更新
3.8.2 各种数据类型的取值范围
接下来我们扩充这个程序,让它打印出每种数据类型的取值范围。其实这些范围也能手工计算出来,但由于C语言已经把它们定义在了limits.h与float.h这两份头文件里,因此直接打印会更简单(前一份头文件针对整数,后一份针对浮点数)。为此,我们需要再声明一个函数原型,并在main()函数里面添加一条语句,以调用该函数,最后,我们把这个打印取值范围的函数(也就是printRanges()函数)完整地定义出来。在这个函数里面,我们使用宽度固定的数据类型以排除因操作系统不同而造成的差异。
下面我们就来添加这个函数。我们把新编写的两条include指令,与新添加的这个函数原型,用粗体标出来:

声明了printRanges()函数的原型之后,我们来编写这个函数的定义。另外那个printSizes()函数则与扩充之前的程序相同:

我们在调用printf()函数时所使用的某些格式说明符,现在看上去好像有些奇怪,但笔者会在第19章详细解释它们的含义。这个程序不仅会输出旧版程序所输出的那些内容,而且还会给出这样一段信息:

大家在自己的操作系统上看到的取值范围,跟这里相比有没有区别?