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;也是可以的。
本文详细解析了预处理指令 #define 和类型定义 typedef 的区别与使用方法,包括它们在预处理阶段和编译阶段的不同作用,以及如何正确使用它们避免常见错误。
616

被折叠的 条评论
为什么被折叠?



