#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专家编程》