typedef与#define区别
typedef工具是一个高级数据特性,利用typedef可以为某一类型自定义名称。typedef与#define有点类似,但是两者也有三处不同。
- typedef创建的符号名只受限于类型,不能用于值
- typedef由编译器解释,不是预处理器(我们平时经常说的编译预处理,其实包含了两步:
功能 | 生成文件 |
---|---|
预处理, 展开头文件/宏替换/去掉注释/条件编译 | (test.i main .i) |
编译, 检查语法,生成汇编 | ( test.s main .s) |
- 在其受限范围内,typedef比#define更灵活,可移植性更高
typedef的工作原理
假设要用BITE表示一个字节的数组,只需像定义个char类型变量一样定义BYTE,然后在前面加上typedef关键字即可:
typedef unsigned char BYTE;
//随后便可用BYTE来定义变量:
BYTE x,y[10],*z;
为现有的类型创建一个名称简直多此一举,但是它有时确实非常有用。在前面的示例中,用BYTE代替unsigned char表明你打算用BYTE的变量表示数字字符,而不是字符码。
typedef与结构体
typedef还经常应用于结构体类型的命名
//用typedef来命名一个结构类型时,可以省略该结构的标签
typedef struct {
double x;
double y;
}rect;
rect r1 = {3.0,5.0};
rect r2 =;
//假设用如上方式使用typedef定义类型名,以上代码将被翻译成:
struct{
double x;
double y;
}s1 = {3.0,5.0};
struct{
double x;
double y;
}s2;
用typedef来命名结构体是不是显得更加简便,使用的时候可以直接用定义的类型名称定义变量。(nb的一批)
注意点:typedef并没有创建任何新的类型,它只是为某个已存在的类型增加了一个方便使用的标签。