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

    文章

    935

    浏览量

    54759
  • typedef
    +关注

    关注

    0

    文章

    26

    浏览量

    9530
  • float
    +关注

    关注

    0

    文章

    9

    浏览量

    7767
收藏 人收藏

    评论

    相关推荐

    SV中define宏定义的用法

    SV中使用预处理指令`define来定义宏,宏可以用来创建文本替换。根据场景不同,`define主要用来定义常量、简化复杂的表达式或代码段以及提高代码的可移植性。其基本语法为:
    的头像 发表于 10-21 14:22 297次阅读

    LM358M和LM358MX什么差异

    请教一下,LM358M / MX差异
    发表于 09-24 06:02

    不同行业的配电室什么差异

    蜀瑞创新:不同行业的配电室在多个方面存在显著的差异,这些差异主要体现在配电室的规模、功能、设备配置、安全性要求以及运行管理等方面。每种类型的配电室都会根据具体的应用场景和行业特点进行定制化设计。
    的头像 发表于 08-29 16:55 235次阅读
    不同行业的配电室<b class='flag-5'>有</b>什么<b class='flag-5'>差异</b>?

    typedef和struct啥区别

    在C语言中, typedef 和 struct 是两个非常重要的关键字,它们在定义数据结构时扮演着关键的角色。然而,它们之间一些明显的区别。 1. struct 关键字 struct (结构体
    的头像 发表于 08-20 11:00 937次阅读

    typedef struct和直接struct的区别

    在C语言中, typedef 和 struct 是两种不同的关键字,它们在定义和使用上有着明显的区别。 typedef struct 和直接 struct 在 C 语言中用于定义结构体类型,但它们在
    的头像 发表于 08-20 10:58 2434次阅读

    开关柜和环网柜之间哪什么差异

    开关柜、环网柜之间的差异分析
    的头像 发表于 07-16 15:37 479次阅读
    开关柜和环网柜之间<b class='flag-5'>有</b>哪什么<b class='flag-5'>差异</b>?

    FSMC_Bank1和FSMC_Bank1E没有定义是怎么回事?

    (STM32F429_439xx) #define FMC_Bank1((FMC_Bank1_TypeDef *) FMC_Bank1_R_BASE) #define FMC_Bank1E
    发表于 05-15 08:00

    QNX与Linux基础差异对比

    对于QNX系统和Linux系统的内核差异,我们抛开宏内核、微内核之类的争议不谈。单纯从开发应用的角度而言,QNX和Linux系统的差异到底多大,在开发的时候需要注意哪些细节问题?
    发表于 04-17 10:52 690次阅读

    C语言中的typedef的应用

    C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。下面的实例为单字节数字定义了一个术语 BYTE。
    发表于 03-06 11:34 337次阅读
    C语言中的<b class='flag-5'>typedef</b>的应用

    BUCK电路轻载条件下DCM与CCM的差异哪些?

    BUCK电路轻载条件下DCM与CCM的差异哪些? 在讨论BUCK电路轻载条件下DCM(不连续导通模式)与CCM(连续导通模式)的差异之前,我们首先要了解BUCK电路的工作原理和两种不同的工作模式
    的头像 发表于 01-31 18:18 2190次阅读

    板式换热器和管式换热器的差异哪些?

    板式换热器和管式换热器的差异哪些? 板式换热器和管式换热器是两种常见的换热设备,用于在工业生产中进行热能传递。它们在结构、工作原理、适用场合等方面存在一些差异。接下来将详细介绍板式换热器和管式
    的头像 发表于 01-30 17:26 2962次阅读

    LED洗墙灯跟线条灯的区别,使用的芯片差异

    LED洗墙灯跟线条灯的区别,使用的芯片差异
    的头像 发表于 01-05 14:30 1701次阅读

    陶瓷电容温度系数浅析:1类和2类电容差异?如何标识?

    陶瓷电容温度系数浅析:1类和2类电容差异?如何标识?
    的头像 发表于 12-08 17:30 1158次阅读
    陶瓷电容温度系数浅析:1类和2类电容<b class='flag-5'>有</b>何<b class='flag-5'>差异</b>?如何标识?

    define宏定义

    define宏定义 以#号开头的都是编译预处理指令,它们不是C语言的成分,但是C程序离不开它们,#define用来定义一个宏,程序在预处理阶段将用define定义的来内容进行了替换。因此在程序运行时
    的头像 发表于 11-24 15:35 813次阅读

    平面型VDMOS和超结型VDMOS的雪崩耐量差异以及如何选择?

    平面型VDMOS和超结型VDMOS的雪崩耐量差异以及如何选择? 平面型VDMOS和超结型VDMOS是常见的金属氧化物半导体场效应管(MOSFETs)的不同设计类型。它们在结构上存在一些细微的差异
    的头像 发表于 11-24 14:15 1319次阅读