全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 接口/总线/驱动 >

typedef与#define有什么差异吗

时间:2022-08-11 14:34

人气:

作者:admin

标签: typedef  float  编码 

导读:大部分朋友在编写代码的时候都会把无符号类型、结构体等等进行简化,要么用宏定义进行文本替换,要么就通过typedef来定义一个类型别名。...

最近在开发中使用typedef的时候掉了一次坑,这里记录一下同时分享给大家~

1、typedef与#define

大部分朋友在编写代码的时候都会把无符号类型、结构体等等进行"简化",要么用宏定义进行文本替换,要么就通过typedef来定义一个类型别名。

参考代码:

pYYBAGL0oiKAF0AlAAB94J8Fr1A803.png

似乎在一般人眼里两种方式并没有什么区别,有些人习惯用宏,有些人习惯用typedef,甚至一套代码中还出现两种定义,不过使用typedef来兼容不同平台的类型更加的专业。

两者的区别其实还是很明显的,只是大部分人在编码的过程中没有遇到两者差异的情况,

那么这里就举个例子:

参考代码:

pYYBAGL0ojWAIYyfAACxDZDrVcM678.png

如果typedef与#define没啥差异的话,那么测试代码中的Var1与Var2使用方法应该是一样的,但当我们使用var2进行赋值则编译不通过。

pYYBAGL0okeALeqiAAB-_jnV8V4600.png

编译结果出来你应该就明白了,typedef把整个int*作为了一个整体,与基本类型int,float等一样,此时const修饰的是Var2变量,与int * const等价,其指针所指向的地址无法改变,但内容*Var的内容可以进行修改。

同样还有一个类似且非常值得注意的地方:

参考代码:

pYYBAGL0olqAKaiNAACU8LglwYI762.png

问题就处在pVar4的定义上,此时pVar4仅仅只是一个int类型而非int*类型,这也是宏定义所带来的弊端。

这样大家应该对typedef定义的整体类型与#define定义的宏有了一个较好的理解了吧。

2、数组类型是typdef专属?

顺便问了一下同事:你觉得typedef还有与#define不同的地方吗?他想了想,回答道 : typedef可以直接定义数组类型,而#define不能。他的回答也对,但是也不完全对:

参考代码:

poYBAGL0onSAPD6gAAEL4i4ezEU399.png

因为宏定义无法像普通定义变量那样:"类型变量"的形式,所以认为同事的说法也算对,不过对于如上面代码的宏定义来定义变量,其实也差别不大吧。

poYBAGL0ooWARUSBAAB0FqdAZz0370.png



审核编辑:刘清

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信