我试图理解 typedef 和 Define 之间的区别。专门有很多好帖子上一个关于SO的问题 https://stackoverflow.com/questions/1666353/is-typedef-and-define-the-same-in-c,但是我无法理解帖子中所说的
#define
是一个预处理器标记:编译器本身永远不会看到它。
typedef
是编译器标记:预处理器不关心它。
谁能更详细地解释一下这一点。我对这里的术语预处理器感到困惑。
预处理器是一个运行的程序before编译器并本质上执行文本替换。当你写:
#define X 10
int main()
{
int x = X;
}
预处理器将该文件作为输入,执行其操作并输出:
int main()
{
int x = 10;
}
然后编译器对预处理的输出进行处理。
typedef
另一方面是编译器可以理解的构造。当你写:
typedef unsigned int uint_32;
编译器知道uint32
实际上是一个别名unsigned int
。该别名由编译器本身处理,并且比简单的文本替换涉及更多的逻辑。通过一个简单的例子,这一点就变得显而易见:
typedef int my_int;
int main()
{
unsigned my_int x; // oops, error
}
If a typedef
如果是一个简单的文本替换机制(就像预处理器一样),那么它可以工作,但这是不允许的,并且将无法编译。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)