7.5.2类型定义和可移植性

 

类型定义使编写可移植程序的一种重要工具。程序从一台计算机移动到另一台计算机可能引发的问题之一就是不同计算机上的类型取值范围可能不同。如果 i 是int 类型的变量,那么赋值语句 i = 100000;

在使用32位整数的机器上是没问题的,但是在使用16位整数的机器上就会出错。

可移植性技巧 为了更大的可移植性,可以考虑使用typedef定义新的整数类型名。

假设编写的程序需要用变量来存储产品数量,取值范围在0 ~ 50000。 为此可以使用long int类型的变量(因为这样保证可以存储至少2147483647以内的数),但是用户更愿意使用int 类型的变量,因为算术运算时int 类型值比long int 类型值运算速度快;同时,int类型变量占用的空间较少。

我们可以定义自己的“数量”类型,而避免使用int类型声明数量变量:

typedef int Quantity;

并且使用这种类型来声明变量: Quantity q;

当把程序转到使用较短整数的机器上时,需要改变Quantity的定义:

typedef long Quantity;

可惜的是,这种技术无法解决所有的问题,因为Quantity定义的变化可能会影响Quantity类型变量的使用方式。我们至少需要改动使用了Quantity类型变量的printf函数调用和scanf函数调用。用转换说明%ld替换%d。

C语言库自身使用yypedef为那些可能依据C语言实现的不同而不同的类型创建类型名;这些类型的名字经常以_t结尾,比如ptrdiff_t、size_t和wchar_t。这些类型的精确定义不尽相同,下面是一些常见的例子:

typedef long int ptrdiff_t;

typedef unsigned long int size_t;

typedef int wchar_t;

在C99中,<stdint.h>头使用typedef定义占用特定位数的整数类型名。例如,int32_t是恰好占用32位的有符号整型。这是一种有效的定义方式,能是程序更易于移植。

 
上一篇:JAVA程序设计:分配重复整数(LeetCode:1655)


下一篇:2021-06-03