typedef和define的区别 一句话区别typedef#define类型别名文本替换编译器认识预处理器认识有类型没有类型推荐使用一般只定义常量、宏typedef 是 C 语法define 只是把文字替换掉。typedef 是什么例如typedefintINT;意思就是给 int 起了一个新名字叫 INT。于是INT a10;等价于inta10;编译器知道INT↓↓int所以它是真正的类型。define 是什么例如#defineINTint预处理的时候直接变成inta10;它不是类型。只是看到 INT↓直接替换成 int这一步发生在编译之前。举个例子假设写#definePI3.1415926后面doublesPI*r*r;预处理以后变成doubles3.1415926*r*r;编译器根本不知道曾经有 PI。typedef 可以定义复杂类型例如函数指针不用 typedefint(*func)(int,int);很难看可以写typedefint(*FUNC)(int,int);define 最大的问题它只是替换。例如#defineSQUARE(x)x*x看起来没问题。结果SQUARE(32)变成32*32结果11而不是25所以宏容易出错。正确写法必须#defineSQUARE(x)((x)*(x))typedef 做不到这种事情typedef只能给类型起名字。例如typedefintINT;不能写typedef3.14PI;这是错误的。总结typedef 是给类型起别名由编译器识别是 C 的类型系统的一部分#define 是预处理阶段进行纯文本替换没有类型信息主要用于定义常量、资源 ID 和宏。现代 C 中类型别名更推荐使用 using而不是 typedef。

本月热点