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

    文章

    1040

    浏览量

    57125
  • typedef
    +关注

    关注

    0

    文章

    26

    浏览量

    9903
  • float
    +关注

    关注

    0

    文章

    9

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    单片机IO配置不同速度啥区别

    3个,有些4个。一般定义在xxx_gpio.h文件中。 #define GPIO_Speed_2MHzGPIO_Speed_Level_1/*!< I/O
    发表于 12-29 07:45

    Typedef在C语言中的应用

    Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。例如,思考一下下面的例子: #define dPS struct s * typedef
    发表于 12-22 13:53

    typedef结构体使用

    虽然结构体的出现能够让我们一个更科学的数据结构来管理数据,但是每次使用结构体都需要struct...,未免显得有些冗长和麻烦。typedef的助攻,我们就可以很轻松地给结构体类型起一个容易理解
    发表于 12-08 07:04

    #define预编译的指令

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

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

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

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

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

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

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

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

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

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

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

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

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

    ArkUI-X平台差异

    逻辑不同,或使用了不支持跨平台的API,就需要根据平台不同进行一定代码差异化适配。当前仅支持在代码运行态进行差异化,接下来详细介绍场景及如何差异化适配。 使用场景 平台差异化适用于以下
    发表于 06-10 23:08

    配置文件的差异介绍

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

    RoHS与ELV什么差异

    RoHS的标准RoHS(RestrictionofHazardousSubstances)是一项由欧盟立法制定的强制性标准,全称为《关于限制在电子电气设备中使用某些有害成分的指令》。该标准的核心目标是限制在电子电气产品制造过程中使用特定的有害物质,以减少对环境和人类健康的潜在危害。RoHS标准的应用范围RoHS指令涵盖了广泛的产品类别,包括但不限于大型家用电
    的头像 发表于 05-12 15:44 1539次阅读
    RoHS与ELV<b class='flag-5'>有</b>什么<b class='flag-5'>差异</b>?

    卤素检测:PCB卤与无卤的差异

    在当代电子产业中,印制电路板(PCB)是核心组件之一,其材料与工艺的革新对电子设备的性能与可持续性有着深远影响。卤与无卤PCB作为当前市场上的两大类,各自有着独特的特性与应用范围。卤与无卤PCB
    的头像 发表于 04-28 20:17 3464次阅读
    卤素检测:PCB<b class='flag-5'>有</b>卤与无卤的<b class='flag-5'>差异</b>

    示波器探头的选型与应用差异解析

    在电子测量领域,高压差分探头与传统无源探头作为两类基础测量工具,其技术特性和应用场景存在显著差异。本文从测量原理、系统适配和信号处理三个维度进行对比分析。 一、信号拾取机制的差异 传统无源探头采用单
    的头像 发表于 04-24 16:15 798次阅读
    示波器探头的选型与应用<b class='flag-5'>差异</b>解析