typedef 与#define 的区别

噢,上帝!这真要命!别急,要命的还在后面呢。看如下例子:
E ), #define INT32 int
unsigned INT32 i = 10
F ), typedef int int32
unsigned int32 j = 10
其中 F) 编译出错,为什么呢? E )不会出错,这很好理解,因为在预编译的时候 INT32
被替换为 int ,而 unsigned int i = 10 ;语句是正确的。但是,很可惜,用 typedef 取的别
名不支持这种类型扩展。另外,想想 typedef static int int32 行不行?为什么? 下面再看一个与 #define 宏有关的例子:
G) #define PCHAR char*
PCHAR p3,p4;
H ), typedef char* pchar;
pchar p1,p2;
两组代码编译都没有问题,但是,这里的 p4 却不是指针,仅仅是一个 char 类型的字符。
这种错误很容易被忽略,所以用 #define 的时候要慎之又慎。关于 #define 当然还有很多话题
需要讨论,请看预处理那一章。当然关于 typedef 的讨论也还没有结束,在指针与数组那一
章,我们还要继续讨论。

你可能感兴趣的:(算法,数据结构)