类型定义使编写可移植程序的一种重要工具。程序从一台计算机移动到另一台计算机可能引发的问题之一就是不同计算机上的类型取值范围可能不同。如果 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位的有符号整型。这是一种有效的定义方式,能是程序更易于移植。 |
|
相关文章
- 02-25C++中的静态类型和动态类型的定义
- 02-25c – 如何在QList中使用qSort和自定义类型?
- 02-25Sublime Text3自定义全部字体大小、字体类型和背景颜色
- 02-257.5.2类型定义和可移植性
- 02-25Delphi中定义了四种布尔类型:Boolean,ByteBool,WordBool和LongBool。后面三种布尔类型是为了与其他语言兼容而引入的
- 02-25树和二叉树的抽象数据类型定义
- 02-25TS object 类型 和 {[key:string]: unknown} 定义类型的区别
- 02-25大三寒假学习 spark学习 函数定义 函数的类型和值
- 02-25Go 的 类型定义 和 类型别名 (Type Alias Declarations)
- 02-25R语言使用R原生函数plot和lines可视化线图、并使用lty参数自定义线条类型、lwd自定义设置线条的粗细、col参数自定义线条颜色(Change R base plot line types)