1.可以用其他类型说明符对宏类型进行扩展,但对typedef所定义的类型名却不能这样做。如下所示:
#define peach int
unsigned peach i;/*没问题*/
typedef int banana;
unsigned banana i;/*错误,非法!*/
unsigned peach i;/*没问题*/
typedef int banana;
unsigned banana i;/*错误,非法!*/
2.在连续几个变量的声明中,用typedef定义的类型能够保证声明中的所有变量均为同一种类型,而用#define定义的类型则无法保证,如下所示:
#define int_ptr int *;
int_ptr chalk,cheese;
int_ptr chalk,cheese;
经过宏扩展,第二行变为:
int * chalk,cheese;
这使得chalk和cheese成为不同的类型。
相反,下面的代码:
typedef char * char_ptr;
char_ptr Bentley,Rolls_Royce;
char_ptr Bentley,Rolls_Royce;