typedef与#define 的区别

typedef 与宏文本替换之间存在一个关键性的区别,typedef可以看做事一种彻底的"封装"类型,在声明它之后不能再往里面增加别的东西。

例如

#define peach int

unsigned  peach i;//没问题

 

typedef int banana   ;

unsigned   banana i;/*错误,非法*/

 

 

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

 

#define  int_ptr  int *

int_ptr chalk,cheese;

宏扩展之后,实际声明为:

int *chalk,cheese;

cheese 的类型为int ,这和 我们起初的预期不一样。

而typedef int *   int_ptr ;

int_ptr chalk,cheese;

此时 ,chalk和cheese的类型依然相同,都是指向int 的指针.

 

posted @ 2012-12-11 11:11  helloyu  阅读(122)  评论(0)    收藏  举报