Define 和typedef

1)#define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。

例如:#definePI3.1415926程序中的:area=PI*r*r会替换为3.1415926*r*r如果你把#define语句中的数字9写成字母g预处理也照样带入。

2)typedef是在编译时处理的。

3)typedefint*int_ptr;与#defineint_ptrint*作用都是用int_ptr代表int*,但是二者不同,

#define在预处理时进行简单的替换,而typedef不是简单替换,而是采用如同定义变量的方法那样来声明一种类型。

也就是说;

#defineint_ptrint*;int_ptra,b;//相当于int*a,b;只是简单的宏替换

typedefint*int_ptr;int_ptra,b;//a,b都为指向int的指针,typedef为int*引入了一个新的助记符。


#definePINTint*;就是把所有的词PINT替换成int*,替换完毕再编译。

typedefint*PINT;是语句,由编译器在编译过程中编译处理。int*x;和pintx;的声明是等价的


typedefint*PINT;longint*x;声明是可以的,但longPINTx;不可以。因为PINT是新的助记符,longPINT是啥编译器不知道。

#definePINTint*longint*x;声明是可以的,longPINTx;也是可以的。

你可能感兴趣的:(typedef)