typedef在C语⾔中的⽤法
typedef⼯具是⼀个⾼级数据特性,利⽤typedef可以为某⼀类型⾃定义名称。它与#define有3个不同点:
(1)与#define不同,typedef创建的符号名只受限于类型,不能⽤于值。
(2)typedef由编译器解释,不是预处理器。
(3)在其受限范围内,typedef⽐#define更灵活。
⼯作原理
使⽤typedef时要记住,typedef并没有创建任何新类型,它只是为某个已存在的类型增加⼀个⽅便使⽤的标签。
⽰例:假设要⽤BYTE表⽰1字节的数组。
typedef unsigned char BYTE;
随后就可以⽤BYTE来定义变量:
BYTE X,Y[10],*Z;
上⾯⼀⾏代码就相当于
unsigned char X,Y[10],*Z;
可见,typedef相当于给⼀个已有的类型起了⼀个新的名字,然后可以像使⽤旧类型名⼀样使⽤新的类型名来声明变量。这是否多此⼀举呢?其实不是。
⾸先,合理使⽤typedef可以增加程序的可读性,前⾯的⽰例中⽤BYTE代替unsigned char表明你打算⽤BYTE类型的变量表⽰数字,⽽不是字符码。
其次,typedef可以提⾼程序的可移植性。我们知道sizeof运算符的返回值是size_t类型,time()函数返回的类型:time_t类型。这是⼀个⽆符号数,但它不是⼀个新类型。这就⽤到了C语⾔的typedef机制,允许程序员为现有类型创建别名。C头⽂件系统使⽤typedef把size_t作为unsigned int或unsigned long的别名。这样,使⽤size_t类型时,编译器会根据不同的系统替换标准类型。对于time_t类似,只要包含time.h头⽂件,程序就能访问合适的定义。
与#define的⽐较
typdef的⼀些特性与define的功能重合。例如
typdef的⼀些特性与define的功能重合。例如
#define BYTE unsigned char
这是预处理器⽤BYTE替换unsigned char。
但也有#define没有的功能,例如:
typedef char * STRING;
编译器把STRING解释为⼀个类型的表⽰符,该类型指向char。因此
STRING name, sign;
相当于
char * name , * sign;
但是,如果这样假设:
#define STRING char *
然后,下⾯的声明:
STRING name, sign;
将被翻译成:
char * name, sign;
这导致name才是指针。
发挥typedef的好处
除了刚才上⾯提到的可读性和可移植性的好处外,在⼀些场合还可以发挥typedef的更多好处。
使⽤typedef的第⼀个原因:为经常出现的类型创建⼀个⽅便、易识别的类型名。
例如,typedef⽤来命名⼀个结构类型,可以省略结构的标签:
typedef struct {double x; double y;} rect;
那么可以这样使⽤rect类型名:
rect r1={3.0, 6.0};
rect r2;
以上代码被翻译成c语言struct头文件
struct {double x; double y;} r1={3.0, 6.0};
struct {double x; double y;} r2;
使⽤typedef的第⼆个原因是:typedef常⽤于给复杂的类型命名。例如,下⾯的声明:
typedef char (* FRPTC()) [5];
把FRPTC声明为⼀个函数类型,该函数返回⼀个指针,该指针内含5个char类型元素的数组。
使⽤typedef时要记住,typedef并没有创建任何新类型,它只是为某个已存在的类型增加⼀个⽅便使⽤的标签。通过结构、联合和typedef,C提供了有效处理数据的⼯具和处理可移植数据的⼯具。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。