0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

typedef与#define有什么差异吗

冬至配饺子 来源:最后一个bug 作者:bug菌 2022-08-11 14:34 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

最近在开发中使用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



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码
    +关注

    关注

    6

    文章

    1015

    浏览量

    56649
  • typedef
    +关注

    关注

    0

    文章

    26

    浏览量

    9841
  • float
    +关注

    关注

    0

    文章

    9

    浏览量

    7976
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    #define预编译的指令

    #define预编译指令 顾名思义,这个指令的含义是“定义”,大家可以把该指令视为一种文本的替换。详细在下面代码展示 [list=1] [*]//使用该指令定义了一个数 [*]#define
    发表于 12-05 07:29

    是德科技PathWave和纳米软件ATECLOUD哪些差异

    平台,主要针对仪器仪表的自动化测试以及提供电源模块、芯片、射频器件的自动化测试解决方案。这两个电子测试软件平台在定位功能、测试场景、架构部署方面有着明显差异。 是德科技PathWave 定位与目标: PathWave: 是一个综合性的电子设计和测试软件平台。它覆盖了从设计仿
    的头像 发表于 09-08 17:23 675次阅读
    是德科技PathWave和纳米软件ATECLOUD<b class='flag-5'>有</b>哪些<b class='flag-5'>差异</b>?

    不同类型的电能质量在线监测装置数据验证频率差异

      电能质量在线监测装置的类型划分,通常基于 应用场景(电网侧 / 用户侧)、监测功能(通用型 / 专项型)、电压等级(高压 / 中低压) 三大维度。不同类型装置的核心差异在于 “数据用途的关键程度
    的头像 发表于 09-04 11:55 375次阅读

    屏蔽双绞线哪些种类?存在哪些差异

    屏蔽双绞线根据屏蔽方式的不同,主要分为以下种类,每种在结构、性能和适用场景上存在差异: 1. F/UTP(铝箔总屏蔽双绞线) 结构:在8芯双绞线外层包裹一层铝箔,铝箔导电面铺设接地导线,无独立线
    的头像 发表于 08-20 10:38 1201次阅读

    铅VS无铅:PCBA加工工艺的6大核心差异,工程师必看

    一站式PCBA加工厂家今天为大家讲讲PCBA加工铅工艺与无铅工艺差异哪些?PCBA加工铅工艺与无铅工艺的六大差异。作为拥有20余年PC
    的头像 发表于 08-08 09:25 452次阅读

    自动化测试平台中TestCenter和ATECLOUD哪些差异

    TestCenter和ATECLOUD虽然都是自动化测试平台,但两者在试用领域、技术架构、功能特性等方面具有很大的差异性,两者的面向客户也有所不同。本文将简单分析两个平台的特点和差异
    的头像 发表于 07-25 09:54 451次阅读
    自动化测试平台中TestCenter和ATECLOUD<b class='flag-5'>有</b>哪些<b class='flag-5'>差异</b>?

    铁芯VS无铁芯:直线电机模组核心差异全解析

    在直线电机模组的大家族中,铁芯直线电机模组和无铁芯直线电机模组是两种常见且各具特色的类型。它们在结构设计、性能表现以及应用场景等方面存在显著差异,了解这些差异对于在实际应用中做出合适的选择至关重要
    的头像 发表于 07-22 11:37 852次阅读
    <b class='flag-5'>有</b>铁芯VS无铁芯:直线电机模组核心<b class='flag-5'>差异</b>全解析

    配置文件的差异介绍

    配置文件的差异 FA模型应用在config.json文件中描述应用的基本信息,一个应用工程中可以创建多个Module,每个Module中都有一份config.json文件。config.json由
    发表于 06-05 06:50

    不同行业的数字工厂哪些特点和差异

    各行业的独特差异也将持续推动定制化解决方案的创新,以满足不同行业日益增长的数字化转型需求。对于设备管理系统而言,需要深入理解各行业数字工厂的特点和差异,针对性地进行优化和升级,为各行业数字工厂的稳定运行和高效发展提供坚实保障。
    的头像 发表于 04-17 10:29 553次阅读
    不同行业的数字工厂<b class='flag-5'>有</b>哪些特点和<b class='flag-5'>差异</b>?

    DLP Discovery 4100开发套件和评估模块之间什么差异呢?

    评估模块和DLP650LNIR DMD 评估模块的结合也可以用于像素控制,那这两者什么差异呢,比如开发难度,耐受功率,我们想最好用matlab或Labview控制。谢谢
    发表于 02-28 06:19

    DLPC3439和DLPC3479具体哪些差异呢?搭配DLP芯片怎么配对呢?

    请问:DLPC3439和DLPC3479具体哪些差异呢?搭配DLP芯片怎么配对呢?
    发表于 02-21 07:40

    请问DLP650NE系列1910-623AE和1910-6237E型号之间是否差异

    我们在使用DLP650NE系列1910-623AE使用过程中出现过:亮点、红边、脏污,烧坏等不良现象,实际使用不良率高达30%以上; 而DLP650NE系列1910-6237E极少出现,正常使用,请问1910-623AE和1910-6237E型号之间是否差异?出现红边
    发表于 02-17 07:35

    DLP4710与DLP4711在应用、驱动方案、引脚之间是否存在差异

    DLP4710与DLP4711在应用、驱动方案、引脚之间是否存在差异? 目前新设计的机器中,DLP4711可以正常点亮、DLP4710无法点亮。是否由于各引脚功能不是相同的导致两者间差异
    发表于 02-17 06:36

    C++ QT开发,IC读写器程序

    0x10#define NEEDHALT 0x20 //#define NEEDSERIAL 0x08#define EXTERNKEY 0x10 //让读写器发出声音typedef
    的头像 发表于 12-30 14:55 1073次阅读
    C++ QT开发,IC读写器程序

    DAC108S085设定为第一级输出时,不同通道差异,为什么?

    DAC108S085设定为第一级输出时,不同通道差异 1.24V基准 ABCD四个通道都接近1.2mV EFG接近0.9mV H是0.3mV DAC的偏差是越靠后越大?
    发表于 12-18 07:18