typedef与define有两个关键性的区别,这会带给我们一些烦恼。但其根本区别就是typedef是个“封装”好的类型,就是在声明类型之后不能再往里面添加其他声明。区别如下:
1)添加其他
#define example int
则:
unsigned example a;
完全没有问题
typedef example int
但会报错
2)连续声明
#define pstr int*
typedef int* pstr2
假如我们连续声明多个变量:
pstr a,b;
pstr2 c,d;
则我们会发现:a,c,d为指向int 的指针而b则是一个int类型的变量,这与我们的本意相悖。
其实,我们将pstr拆开就会明白这是为啥:
对于pstr:
Int * a,b;
这就是原因。