typedef工具是一种高级数据特性,它使您能够为某一类型创建您自己的名字。
在这个方面,它和define相似,但是它们具有3个不同之处:
- 与#define不同,typedef 给出的符号名称仅限于对类型,而不是对值。
- typedef的解释由编译器,而不是预处理器执行。
- 虽然它的范围有限,但在其受限范围内,typedef比#define更灵活。
优点:
- typedef 有助于增加可移植性。 //不同平台,类型的定义可能不同
- 为经常出现的类型创建一个方便的、可识别的名称。 //简单类型int ,结构体,联合体…
- typedef的名称经常被用于复杂的类型 //声明函数类型
使用场景:
- 给简单类型起别名 如BYTE, Uint16等
- 给结构体,联合体起别名
- 声明函数类型
当使用typedef时,要记住它并不是创建了新的类型,它只是创建了便于使用的标签。
例程:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
/*
1. 给简单类型起别名 如BYTE,Uint16等
2. 给结构体,联合体起别名
3. 复杂的类型:声明函数类型
*/
/*BYTE等这些定义,通常使用大写字母,以提醒用户这个类型名称实际上是一个符号缩写。不过也可以使用小写字母。*/
#define STRING1 char *
typedef unsigned char BYTE;
typedef char * STRING;
typedef struct
{
double x;
double y;
}rect;
typedef union
{
int x;
char y[4];
}rect1;
//FRPTC 声明为一个函数类型,该类型的函数返回一个指向含有5个元素的char数组的指针。
typedef char (*FRPTC())[5];
int main(void)
{
BYTE x,y,z;
STRING name, sign; //char *name, char *sign.
STRING1 name1,sign1; //char *name1, char sign1 #define 只是替换
rect r1;
rect1 r2;
puts("Bye.");
return 0;
}