c语言枚举类型enum的用法及应用实例

 更新时间:2021年07月16日 13:06:41   作者:无际单片机编程  
enum是C语言中的一个关键字,enum叫枚举数据类型,枚举数据类型描述的是一组整型值的集合,这篇文章主要给大家介绍了关于c语言枚举类型enum用法及应用的相关资料,需要的朋友可以参考下

前言

今天跟大家讲一下我在产品开发时,用枚举(enum)的一些骚操作。

我跟你保证,今天的内容绝对是你在书本和视频学不到的。

为什么要讲枚举呢?

因为我发现它是一个容易被遗忘,同时又非常重要的关键词,大家如果看那些大佬写的程序,真的会发现有非常非常多enum的应用。

让我惊奇的是市面上的一些C语言书籍以及视频课程并没有重视去讲enum。

今天我们还是从理论到实际产品应用,教大家真正掌握enum。

通过这篇内容你能掌握以下知识:

  • 掌握枚举的相关概念
  • 掌握枚举的几种用法
  • 掌握枚举在实际产品中的应用

这篇内容是无际单片机编程那个程序架构视频教程的讲课稿,我稍微做了些调整,如果想看视频的也可以找我们拿。

一、枚举的概念

我对枚举的理解是把一些固定的值一一列举出来分别起个名字,比如说给1取个名字叫Ture, 0取个名字叫False。

Ture和false都是一种表示同一个类型的数据,比如说都是代表逻辑的对错。

我们模拟51单片机的IE中断使能寄存器每个位的值来举一个例子。

我们可以对照单片机寄存器芯片资料一下,当我们设置IE寄存器的值等于0x01的时候,代表开启外部中断0,设置成0x80的时候允许全部中断。

这些枚举值都是针对寄存器IE的固定值,所以我们可以称这些值是同一个类型的数据,我们把他们重新命名一下,便于阅读和记忆,这就是枚举的重要作用之一。

二、枚举的几种用法

1.直接定义枚举值,然后给普通变量赋值。

上面这个代码呢,定义了一个枚举类型,但是没有给枚举类型命名。

像这种枚举呢就是没办法定义枚举变量的,但是呢,这样其实也是可以用的。

我们通过定义一个普通变量,然后把枚举的值赋给他,一样也能输出正确的值,这种方法我个人经常偷懒地用。

2.定义带名称的枚举

这里定义了一个名字为WeekDay的枚举,那么我们就可以通过这个枚举类型定义一个名为day的枚举变量。

三、定义枚举别名

这个代码中通过typedef来定义枚举的别名为WeekDay,然后我们直接使用WeekDay day来定义一个enum变量,这种方法用的是最多的

四、枚举有什么用,用在哪里?

上面我们已经学习了枚举的一些定义方法,那么枚举到底在产品当中有什么用呢?

枚举的作用:

1.为固定的值命名,当作数组访问的下标,当固定的数据很多时,比如有几十上百个,那么如果你应0-100去表示就很难记住每个值代表什么意思。

比如说之前做过汽车故障诊断的产品,需要读取Pid数据存储到数组里,而PID有将近100个。

如果让你去记这100个每个代表哪个PID参数,估计你会崩溃。

而我把每个PID参数通过枚举另起一个一看就知道是什么参数的名字,是不是就方便很多?

因为每个PID都单独存储在数组的一个元素里,那我用这个名字作为下标能很快速地把指定PID参数从数组取出来。

看上图用枚举和不用枚举读取的区别相信你就能理解了。

2.可以作为一个变量,灵活分配数组大小。

我们在定义数组的时候,直接用该枚举类型的最后一个值作为数组大小。

下次要增加或者减少PID参数的时候就不用去改数组大小了,非常方便。

3.枚举作为设置值

上图是STM32的固件库代码,配置GPIO模式的枚举定义。

我们可以看到,每一个枚举值都代表着一个模式,最后通过把这些值写入相应寄存器,最终完成GPIO的模式配置。

这里就先说这么多,更多实战应用可以跟随无际单片机编程做项目去学习和提高。

最后总结:

不知道大家有没有发现,其实枚举配合结构体,C语言照样也能做面向对象的编程。

面向对象是什么意思?就是一切皆对象,单片机GPIO是一个对象,定时器是一个对象,串口又是一个对象等等。

每个对象都有自己独有的属性,比如说GPIO有输入和输出的模式,有输出的频率,有输出的引脚号,这些都是属于GPIO的属性。

那我们可以通过枚举和结构体把这些属性封装起来,当做一个对象来处理。

如果大家理解比较困难也没关系,这都是正常的。

当你代码写到一定量的时候,慢慢就理解了。

到此这篇关于c语言枚举类型enum用法及应用的文章就介绍到这了,更多相关c语言枚举类型enum内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C/C++中文件的随机读写详解及其作用介绍

    C/C++中文件的随机读写详解及其作用介绍

    这篇文章主要介绍了C/C++中文件的随机读写详解及其作用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • C语言小游戏之简易版三子棋(棋盘可自由扩展)

    C语言小游戏之简易版三子棋(棋盘可自由扩展)

    这篇文章主要为大家详细介绍了C语言实现三子棋游戏,还可以自由扩展棋盘大小,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 提高C程序效率的10种有效方法

    提高C程序效率的10种有效方法

    本文向你介绍规范你的C代码的10种方法。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-10-10
  • C++深入浅出讲解希尔排序算法的实现

    C++深入浅出讲解希尔排序算法的实现

    希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。本文会以图解的方式详细介绍希尔排序的基本思想及其代码实现
    2022-05-05
  • C语言动态链表实现学生学籍管理系统

    C语言动态链表实现学生学籍管理系统

    这篇文章主要为大家详细介绍了C语言动态链表实现学生学籍管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • C语言中常见的六种动态内存错误总结

    C语言中常见的六种动态内存错误总结

    学习过C语言中的动态内存函数,例如【malloc】、【calloc】、【realloc】、【free】,那它们在使用的过程中会碰到哪些问题呢,本本文我们一起来探讨下,感兴趣的朋友跟着小编一起来看看吧
    2023-11-11
  • VS2019配置BOOST的方法(v1.70.0库)

    VS2019配置BOOST的方法(v1.70.0库)

    这篇文章主要介绍了VS2019配置BOOST的方法(v1.70.0库),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • C语言复杂链表的复制实例详解

    C语言复杂链表的复制实例详解

    这篇文章主要为大家详细介绍了C语言复杂链表的复制,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • VisualStudio2022编写C语言的实现步骤

    VisualStudio2022编写C语言的实现步骤

    VisualStudio2022是一款强大的集成开发环境,可以用来编写C语言程序,本文主要介绍了VisualStudio2022编写C语言的实现步骤,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • c语言数据结构之栈和队列详解(Stack&Queue)

    c语言数据结构之栈和队列详解(Stack&Queue)

    这篇文章主要介绍了c语言数据结构之栈和队列详解(Stack&Queue),文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08

最新评论