5

可能重复:
c 中的 typedef 和 #define 是否相同?
对#define 和 typedef 感到困惑

以下是否有区别:

#define NUM int

...

NUM x;
x = 5;
printf("X: %d\n", x);

和这个:

typedef int NUM;

...

NUM x;
x = 5;
printf("X : %d\n", x);

两个测试都编译和运行没有问题。那么,它们是等价的吗?

谢谢。

4

1 回答 1

22

当您要创建指针类型的别名时,会有所不同。

typedef int *t1;
#define t2 int *

t1 a, b; /* a is 'int*' and b is 'int*' */
t2 c, d; /* c is 'int*' and d is 'int'  */

此外,typedef遵守范围规则,您可以声明一个块本地的类型。

另一方面,#define当你想在预处理器指令中管理你的类型时,你可以使用它。

于 2012-08-30T17:27:11.190 回答