C语言不仅提供了丰富的数据类型,而且还允许由用户自己定义新的类型说明符,也就是允许由用户为数据类型取“别名”。类型定义符typedef即可用来完成此功能。例如,有整型量a,b,其说明如下:
int a,b;
其中int是整型变量的类型说明符,int的完整写法为integer,为了增加程序的可读性,可以把整型说明符用typedef定义为:typedef int INTEGER,这样以后可以用INTEGER来代替int作为整型变量的类型说明了。例如:INTEGER a,b;等效于int a,b;用typedef定义数组、指针、结构等类型将带来很大的方便,不仅使程序书写简单而且使意义更为明确,因而增强了可读性。
typedef定义的一般形式为:typedef 原类型名 新类型名
其中原类型名中含有定义部分,新类型名一般用大写表示,以便于区别。在有事也可以用宏定义来代替typedef的功能,但是宏定义是由预处理完成的,而typedef则是在编译时完成的,后者更为灵活方便。
定义一个新的类型标识符的方法如下:
(1)、先按变量定义的方法写出定义(如:float x;)。
(2)、将变量名换成新的类型名(如:REAL)。
(3)、在最前面加上typedef(如:typedef float REAL)。
(4)、用新的类型标识符定义变量(如:REAL x,y,z;)。
说明:
(1)、typedef可以定义新的类型名,但不能用来定义变量。
(2)、typedef只能对已经存在的类型增加一个新的类型标识符,但不能创建新的类型。
(3)、typedef与#define有相似之处,但二者实质不同。#define是在编译预处理时处理的,它只能做简单的字符串替换。而typedef是在编译时处理的。实际上并不是做简单的字符串替换。
在文件操作中用到的FILE就是一个已经被说明的结构,其说明如下:
typedef struct
{
short level;
unsigned flags;
char fd;
unsigned char hold;
short bsize;
unsigned char *buffer;
unsigned char *curp;
unsigned istemp;
short token;
}FILE;
这个结构说明已经被包含在stdio.h中,用户只要直接用FILE定义文件指针变量就可以了。事实上,引入类型说明的目的并非是为了方便,而是为了便于程序的移植。