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*指针。

posted @   一蓑烟雨任平生&wf  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示