#define与typedef定义的类型名的区别

1、可以用其他类型说明符对#define定义的类型名进行扩展,但对typedef所定义的类型名不能这样做。

  例如:

  #define peach int

  unsigned peach i;  //加上unsigned类型说明符,正确!

  typedef int banana;

  unsigned banana i;  //加上unsigned类型说明符,错误!

 

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

  例如:

  #define int_ptr int *

  int_ptr chalk,cheese;

  经过宏扩展,第二行变为:

  int * chalk,cheese;

  这使得chalk和cheese成为不同的类型:chalk是一个指向int的指针,而cheese则是一个int。

  相反,下面的代码中:

  typedef char * char_ptr;

  char_ptr Bentley,Rolls_Royce;

  Bentley和Rolls_Royce的类型依然相同。虽然前面的类型名变了,但他们的类型相同,都是指向char的指针。

 

 

                                                ——摘自《C专家编程》

posted @ 2015-05-27 02:29  lanyuan114489  阅读(305)  评论(0编辑  收藏  举报