可能重复:
Is typedef and #define the same in c?
Confused by #define and 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);
两个测试都编译运行没有问题。那么,它们是等价的吗?
感谢。
答案 0 :(得分:21)
如果要创建指针类型的别名,则会有所不同。
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
。