typedef和#define

发布时间 2023-12-03 11:40:01作者: 一蓑烟雨任平生&wf

typedef工具是一个高级数据特性,利用typedef可以为某一类型自定义名称(起别名)。这方面和#define类似,但二者有三处不同:
1、 与#define不同,typedef创建的符号名只受限于类型(只能作为类型),不能用于值。
2、 typedef由编译器解释,不是预处理器。
3、 在受限范围内,typedef比#define更加灵活。
在typedef和宏文本替换之间存在一个关键性的区别,正确思考这问题的方
法就是把typedef看成是一种彻底的“封装”类型——在声明它之后不能再往里增加别的东西。
① 可以使用其他类型说明符对宏类型名进行扩展,但对typedef所定义的类型名却不能这么做。如下所示:

#define INT int
Unsigned INT a; //合法
typedef long LONG;
unsigned LONG b; //非法 

② 在连续几个变量的声明中,用typedef定义的类型能够保证声明中所有的变量均为同一种类型,而用#define定义的类型则无法保证。如下所示:

#define P_INT int *
P_INT a1, a2;

在宏替换后,第二行变为:
Int * a1, a2;
a1是个int指针,而a2是个int型变量
如果是使用typedef,则不会出现这种情况。如下所示:
typedef char * P_CHAR;
P_CHAR b1, b2;
在这里b1和b2都是char
指针。