当前位置: 首页 > news >正文

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

目录

一、数据类型

二、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.lryc.cn/news/2541.html

相关文章:

  • 锁升级之Synchronized
  • 基于nodejs+vue疫情网课管理系统
  • Zabbix 构建监控告警平台(三)
  • Linux系统之dool命令行工具的基本使用
  • LeetCode-2335-装满杯子需要的最短总时长
  • npm ERR! code ELIFECYCLE解决方案,npm犯错!myweb@1.0.0构建脚本失败。
  • 最小二乘支持向量机”在学习偏微分方程 (PDE) 解方面的应用(Matlab代码实现)
  • ISYSTEM调试实践8-winIDEA Analyzer功能1
  • 每日学术速递2.11
  • 宝塔搭建实战php开源likeadmin通用管理admin端vue3源码(二)
  • 网络基础-虚拟化工具-网桥
  • 剑指 Offer 14- II. 剪绳子 II
  • English Learning - Day55 作业打卡 2023.2.9 周四
  • pixhawk2.4.8-地面站配置-APM固件
  • golang 通道类型
  • 并发、并行、吞吐量、延迟、响应时间 含义理解
  • HTTP 和 HTTPS 的区别
  • 微搭低代码从入门到精通07-基础布局组件
  • Docker镜像的创建
  • 电子技术——MOS差分输入对
  • 树莓派 - 小记
  • 【论文解读|KDD2020】AKT. Context-Aware Attentive Knowledge Tracing
  • Geek Uninstaller:向流氓软件火力全开,超良心的软件彻底卸载工具
  • Java线程池
  • 2023-02-10 - 5 文本搜索
  • 华为OD机试 - 最近的医院(Python),简单直白
  • Leetcode.1223 掷骰子模拟
  • 数据分析到底该怎么学呢?讲真,真不难!
  • 活动星投票紫砂新青年制作一个投票活动
  • Git | 在IDEA中使用Git