typedef是为类型引入新的名字,跟#define相似的地方是,它们在程序中的存在很多时候都是为了程序的可读性。
通过使用typedef获得的是一种彻底的“封装”类型--在声明它之后不能再往里面增加别的东西。
typedef和#define的区别体现在两个方面:
- 可以用其他类型说明符对宏类型名进行扩展,但对typedef所定义的类型名却不能。例如:
#define peach int
unsigned peach i; //可以
typedef int banana;
unsigned banana i; //错误
- 在连续几个变量的声明中,用typedef定义的类型能够保证声明中的所有的变量均为同一种类型,而用#define定义的类型则无法保证。例如:
#define int_ptr int *
int_ptr pa, pb;
经过宏扩展,变为
int * pa, pb;
这样pa和pb成为了不同的类型,pa是一个指向int的指针,而pb则是一个int。如果使用typedef可以解决这个问题
typedef int * int_ptr;
int_ptr pa, pb;
现在pa和pb都是指向int的指针了。