【C语言】宏定义 结构体 枚举变量的用法

news2024/12/28 22:32:09

目录

一、数据类型

二、C语言宏定义

三、C语言typedef重命名

四、 #define与typedef的区别

五、结构体

六、枚举变量


补充学习一点STM32的必备基础知识

一、数据类型

二、C语言宏定义

关键字:#define

  • 用途:用一个字符串代替一个数字,便于理解,防止出错;提取程序中经常出现的参数,便于快速修改
  • 定义宏定义: #define ABC 12345
  • 引用宏定义: int a = ABC; //等效于int a = 12345;

三、C语言typedef重命名

关键字:typedef

  • 用途:将一个比较长的变量类型名换个名字,便于使用
  • 定义typedef: typedef unsigned char uint8_t;
  • 引用typedef: uint8_t a; //等效于unsigned char a;

四、 #define与typedef的区别

  • typedef最后加分号,#define 不用加
  • typedef新名字在右边,#define 新名字在左边
  • 宏定义任何名字都可以换,typedef只能替换变量类型
  • 宏定义无脑改名,范围更宽,typedef重命名变量类型更安全
  • 重命名是增加了一个新名字,原来的名字仍然可以继续使用
    unsigned char a; uint_t a; u8 a; 都可以

五、结构体

关键字:struct

  • 用途:数据打包,不同类型变量的集合
  • 定义结构体变量: struct{char x; int y; float z;} c;
  • struct声明结构体类型,花括号中间是要打包的变量类型,最后是结构体名,最后加分号
  • 结构体的引用
    c.x = 'a'; //c.x调用这个结构体
    c.y = 1;
    c.z = 6.66;
  • 因为结构体变量类型较长,所以通常用typedef更改变量类型名引用结构体成员
  • typedef struct{char x;int y;float z;} StructName //把这个结构体重命名为 StructName
    下次定义结构体: 比如StructName GPIO_Init; //结构体数据类型 结构体变量名称
    GPIO_Init是声明结构体名称,用 引出元素

为了形式美观好看,常见结构体格式如下

typedef struct{
    char x; //数据类型
    int y;
    float z;
} StructName; //最后是结构体数据类型

直接用结构体变量名 用 点 引出数据

引出结构体成员的第二种方式

pStructName -> x = 'A'; //用地址的方式引出结构体成员

举例说明: 

typedef struct
{
  uint16_t GPIO_Pin; 
  GPIOSpeed_TypeDef GPIO_Speed; 
  GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;

在结构体中声明所需要的变量类型以及变量,进行打包 

然后重新起名字,调用

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;	//推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Speed 和 GPIO_Mode又用到了枚举变量 

六、枚举变量

关键字:enum

用于定义一个取值受限制的整型变量,用于限制变量的取值范围

定义枚举变量 举例 enum{MONDAY = 1,TUESDAY = 2;WEDNESDAY = 3} week;

中间用逗号,后边的week是变量,本变量取值范围在1-3(花括号内的值)

typedef改名:

typedef enum{
    MONDAY = 1,
    TUESDAY = 2,
    WEDNESDAY = 3
}week_t;     //week_t是变量类型名

再定义枚举变量 week_t week

week = MONDAY ; //只能按照定义类型 来赋值

枚举值也可以赋值给别的变量

结构体中提到了 GPIO_Speed 和 GPIO_Mode,它们都是枚举变量

typedef enum
{ 
  GPIO_Speed_10MHz = 1,
  GPIO_Speed_2MHz, 
  GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;

typedef enum
{ GPIO_Mode_AIN = 0x0,
  GPIO_Mode_IN_FLOATING = 0x04,
  GPIO_Mode_IPD = 0x28,
  GPIO_Mode_IPU = 0x48,
  GPIO_Mode_Out_OD = 0x14,
  GPIO_Mode_Out_PP = 0x10,
  GPIO_Mode_AF_OD = 0x1C,
  GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/337994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

214 情人节来袭,电视剧 《点燃我温暖你》李峋同款 Python爱心表白代码,赶紧拿去用吧

大家好,我是徐公,六年大厂程序员经验,今天为大家带来的是动态心形代码,电视剧 《点燃我温暖你》同款的,大家赶紧看看,拿去向你心仪的对象表白吧,下面说一下灵感来源。 灵感来源 今天&#xff…

2023-02-10 - 6 聚合

当用户使用搜索引擎完成搜索后,在展示结果中需要进行进一步的筛选,而筛选的维度需要根据当前的搜索结果进行汇总,这就用到了聚合技术。聚合的需求在很多应用程序中都有所体现,例如在京东App中搜索“咸鸭蛋”,然后单击搜…

简述操作系统的系统中断

系统中断 系统中断是指 CPU 对系统发生的某个事件做出的一种反应:CPU 暂停正在执行的程序,保留现场后转去执行相应的处理程序,处理完该事件后再返回断点继续执行被打断的程序。 中断可以避免 CPU 轮询等待某条件成立,减小系统开…

2023-02-10 - 5 文本搜索

与其他需要精确匹配的数据不同,文本数据在前期的索引构建和搜索环节都需要进行额外的处理,并且在匹配环节还要进行相关性分数计算。本章将详细介绍文本搜索的相关知识。 本章首先从总体上介绍文本的索引建立过程和搜索过程,然后介绍分析器的…

离子阱量子计算机

1.新闻 2020年6月,科技制造企业霍尼韦尔(Honeywell)发布第一台离子阱量子计算机H0,它拥有64量子体积,它是IBM和谷歌同时期量子计算机的两倍。公司表示之所以能取得这一成就缘于他们2015年在一篇科学论文中展示的量子电…

Docker 容器与容器云读书笔记(一)

最近都没时间看书,闲暇之余看看书,写写笔记,记录一下这难得的时光。 docker容器的出现 2013年初, 一个名字从云计算领域横空出世,并在整个IT行业激起千层浪,这就是Docker。Docker选择容器作为核心和基础&…

与六年测试工程师促膝长谈,他分享的这些让我对软件测试工作有了全新的认知~

不知不觉已经从事软件测试六年了,2016年毕业到进入外包公司外包给微软做软件测试, 到现在加入著名的外企。六年的时间过得真快。长期的测试工作也让我对软件测试有了比较深入的认识。但是我至今还是一个底层的测试人员,我的看法都比较狭隘&am…

知识点滴 - 电源适配器接头的极性

使用各种电子设备,肯定要使用到电源适配器(adapter)。在电源适配器的标签上面一般会有几项是需要注意的。第一,是adapter的“INPUT/输入”,在中国通用的一般是AC100-240V~50-60Hz,这说明这个adapter可以在100V-240V的交流电压下面…

自动驾驶过冬,需要点燃“降本增效”的炉火

进入2023年,人们还在等待这个冬天的第一场雪,同时也在感叹暖冬已经成为了新的常态。但对自动驾驶产业而言,这个冬天似乎并没有那么暖。回顾2022年,全球自动驾驶行业裁员、倒闭、部门裁撤的消息不绝于耳。资本市场也逐渐放弃了自20…

流浪气球?ChatGPT这样回答,我惊了

近日,流浪地球电影反响热烈,“流浪气球”事件讨论热火,连人工智能ChatGPT都发表了 “自己”的看法,到底是怎么一回事呢?起因是我国一只民用气球,因技术和天气原因不小心飘到了米国上空,对方当时…

vue组合式API及生命周期钩子函数

一、组合式API 什么是组合式API? vue3中支持vue2的选项式、支持新的编程模式–函数式编程(没有this指针)做了一个兼容,可以在一个组件中使用函数式编程和OOP编程(选项式) setup()函数 可以使用setup属性…

二叉树的遍历 (2023-02-11)

二叉树的遍历 二叉树的遍历分为:先序遍历、中序遍历、后序遍历和层次遍历。 1.先序遍历(根左右) (1)访问根节点 (2)左子树按根左右遍历 (3)右子树按根左右遍历 2.中序…

【Flume】高级组件之Channel Selectors及项目实践

文章目录1. 组件简介2. 项目实践2.1 Replicating Channel Selector实践2.1.1 需求2.1.2 配置2.1.3 运行2.2 Multiplexing Channel Selector实践2.2.1 需求2.2.2 配置2.2.3 运行1. 组件简介 通俗来讲,Channel Selectors组件控制Source采集到的数据分别流向哪些Channe…

Idea超好用的管理工具ToolBox(附带idea工具)

文章目录为什么要用ToolBox总结idea管理安装、更新、卸载寻找ide配置、根路径idea使用准备工作配置为什么要用ToolBox 快速轻松地更新,轻松管理您的 JetBrains 工具 安装自动更新同时更新插件和 IDE回滚和降级通过下载补丁或一组补丁而不是整个包,节省维护 IDE 的…

snakeyaml数字字符串显示单引号的问题

如题所示&#xff0c;一般yaml结构中&#xff0c;字符串直接显示没有单引号的字符串&#xff0c;如果字符串由数字组成&#xff0c;为了区别真正的数字&#xff0c;这个字符串会使用单引号包围起来。 数据结构如下&#xff1a; Map<String,Object> map new LinkedHashM…

COCO物体检测评测方法简介

本文从ap计算到map计算&#xff0c;最后到coco[0.5:0.95:0.05] map的计算&#xff0c;一步一步拆解物体检测指标map的计算方式。 一、ap计算方法 一个数据集有多个类别&#xff0c;对于该数据库有5个gt&#xff0c;算法检测出来10个bbox&#xff0c;对于人这个类别来说检测有…

类和对象实操之【日期类】

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f38a;每篇一句&#xff1a; 图片来源 The pessimist complains about the wind; the optimist expects it to change; the realist adjusts the sails. 悲观主义者抱怨风;乐观主义者期望它…

两数相加-力扣2-java高效方案

一、题目描述给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外&#xff0c;这两个数都不…

论文阅读 | Rethinking Coarse-to-Fine Approach in Single Image Deblurring

前言&#xff1a;ICCV2021图像单帧运动去糊论文 论文地址&#xff1a;【here】 代码地址&#xff1a;【here】 Rethinking Coarse-to-Fine Approach in Single Image Deblurring 引言 图像去糊来自与物体或相机的运动。现有的deblur领域的深度学习方法大多都是coarse-to-fin…

RiProV2主题美化增加支付页底部提示语ritheme主题美化

美化背景 默认的RiProV2主题在支付提示页,是没有这一行提示的 希望增加根据用户类别,未登录用户购买时提示:当前为游客模式购买。或者其他提示,提示用户未登录购买不保存购买记录等。 索引关键字:ritheme主题美化之增加支付页底部提示语,RiProV2主题美化增加支付页底部提…