typedef和#define
typedef工具是一个高级数据特性,利用typedef可以为某一类型自定义名称(起别名)。这方面和#define类似,但二者有三处不同:
1、 与#define不同,typedef创建的符号名只受限于类型(只能作为类型),不能用于值。
2、 typedef由编译器解释,不是预处理器。
3、 在受限范围内,typedef比#define更加灵活。
在typedef和宏文本替换之间存在一个关键性的区别,正确思考这问题的方
法就是把typedef看成是一种彻底的“封装”类型——在声明它之后不能再往里增加别的东西。
① 可以使用其他类型说明符对宏类型名进行扩展,但对typedef所定义的类型名却不能这么做。如下所示:
#define INT int
Unsigned INT a; //合法
typedef long LONG;
unsigned LONG b; //非法
② 在连续几个变量的声明中,用typedef定义的类型能够保证声明中所有的变量均为同一种类型,而用#define定义的类型则无法保证。如下所示:
#define P_INT int *
P_INT a1, a2;
在宏替换后,第二行变为:
Int * a1, a2;
a1是个int*指针,而a2是个int型变量
如果是使用typedef,则不会出现这种情况。如下所示:
typedef char * P_CHAR;
P_CHAR b1, b2;
在这里b1和b2都是char*指针。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!