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

C语言(枚举类型)

目录

1、什么是枚举

2、枚举成员的类型

3、枚举类型的实际应用


1、什么是枚举

        枚举的定义就是:枚举(Enumeration)是一种用户自定义的数据类型,用于定义一组具有离散值的符号常量

        那通俗一点说就是把一些固定的值,一一列举出来然后起个名字,比方说0是Flase,那么1就是True,枚举类型的应用类似于面向对象编程的思想,都是表示同一类型的数据,比方说一个按键,他的状态有按下和松开,那我就可以把这个按键的状态通过枚举类型让他变成一个独立的对象

enum SwitchState {
    OFF,
    ON
};
enum SystemState {
    READY,
    WAITING,
    ERROR
};
enum OperationMode {
    READ_MODE,
    WRITE_MODE,
    EDIT_MODE
};

2、枚举成员的类型

        我们先看一下子枚举类型的基础语法

enum 枚举名
{
    枚举值表
    value1,value2,value3......
};

        枚举的成员默认情况下都是整数类型,通常是int类型。这意味着每个枚举成员都会被赋予一个整数值,并且这些整数值从0开始递增。如果没有显式地指定枚举成员的值,那么第一个成员的值为0,第二个成员的值为1,依此类推。同时,可以显式地为枚举成员指定一个整数值,这个值可以是正整数、负整数或零。

enum Color {
    RED,    // 默认值为0
    GREEN,  // 默认值为1
    BLUE,   // 默认值为2
    BLACK = -1, // 显式赋值为-1
    WHITE = 10 // 显式赋值为10
};

        枚举成员的访问是通过枚举类型名称和成员名称来进行的。一旦定义了一个枚举类型,可以使用该类型来声明变量,并通过枚举成员名称来设置和访问其值。
  注意:不可以通过.操作符来访问枚举成员的值,因为枚举成员不是结构体或类的成员。枚举成员的访问是通过枚举类型名称和成员名称来进行的,而不是像结构体或类成员那样使用。

#include <stdio.h>

enum Color {
    RED,
    GREEN,
    BLUE
};
int main() {
    enum Color myColor; // 声明一个枚举变量
    myColor = BLUE;    // 设置枚举变量的值为BLUE
    if (myColor == RED) {
        printf("颜色是红色\n");
    } else if (myColor == GREEN) {
        printf("颜色是绿色\n");
    } else if (myColor == BLUE) {
        printf("颜色是蓝色\n");
    }
    return 0;
}

3、枚举类型的实际应用

        首先吧,我们用枚举的目的是啥,就是为了代码整洁好看,我一眼看上去我就知道这是干啥的,那有人就问了,那我用define不行吗,我操那当然可以了,他俩其实用处都是差不多的,只不过枚举一次可以列举一堆,比较方便,而且他俩主要区别就在于作用域之类的比较抽象的概念,扯远了,其实最根本的原因就是debug里头能看枚举类型变量他看不了define的啊

        在51单片机里头,有个头文件叫REGX52.H,打开这里头就能看见P1口还有P2口这些已经全部都被宏定义出来了,我们用户只需要进行给这个寄存器赋值就完事了,但是在reg51.h这个头文件中,这些P1P2口就没有被宏定义出来,我们声明这个头文件再去操作P1口是会报错的

        通常是使用枚举类型,把P1口的P1_1直接杠到8的这些IO口自己定义一下,自己直接操作它了,下面以51中断的IE寄存器为例子,直接把这些状态给定义出来,然后我们对应的寄存器再调用这些值的时候我们就很清楚的知道这个寄存器现在是什么状态了

                        

      

http://www.dtcms.com/a/20205.html

相关文章:

  • C++ ——this指针
  • Rhel Centos环境开关机自动脚本
  • flutter本地推送 flutter_local_notifications的使用记录
  • Java面试题总结 - Java集合篇(附答案)
  • 一种访问网络中主机图片的方法
  • 深度学习框架PyTorch
  • 4090单卡挑战DeepSeek r1 671b:尝试量化后的心得的分享
  • 鸿蒙Next开发-添加水印以及点击穿透设置
  • c++中什么时候应该使用final关键字?
  • 143,【3】 buuctf web [GYCTF2020]EasyThinking
  • 【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析③】
  • 强化学习-NPG
  • Zbrush导入笔刷
  • 解锁电商数据宝藏:淘宝商品详情API实战指南
  • 内容中台构建高效数字化内容管理新范式
  • 【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十三节】
  • 硬件开发笔记(三十四):AHD转MIPI国产方案详解XS9922B(一):芯片方案介绍
  • kubekey一键部署k8s高可用与kubesphere
  • 图像质量评价指标-UCIQE-UIQM
  • Ext系列文件系统
  • CAS单点登录(第7版)14.服务与应用
  • HCIA项目实践--静态路由的总结和简单配置
  • CAS单点登录(第7版)23.Webflow 管理
  • 《探秘AI绿色计算:降低人工智能硬件能耗的热点技术》
  • Atlassian工具集:Jira与Confluence集成优势、使用技巧、更新功能等
  • 【R语言】回归分析
  • C++入门小清单
  • 简要分析LeetCode树经典题目(Java)
  • vscode调试redis
  • 如何构建一个AI驱动的前端UI组件生成器