【C/C++】一文了解枚举使用

简介: 在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。通俗来讲,枚举是具有共同属性的一类整数常数的有限集合,例如星期一到星期天,就是一个成员个数为7的枚举类型,枚举成员也称为枚举项。
作者:[柒号华仔]
个人信条:星光不问赶路人,岁月不负有心人。
个人方向:专注于5G领域,同时兼顾其他网络协议,编解码协议,C/C++,linux等,感兴趣的小伙伴可以关注我,一起交流。

枚举概念

在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。通俗来讲,枚举是具有共同属性的一类整数常数的有限集合,例如星期一到星期天,就是一个成员个数为7的枚举类型,枚举成员也称为枚举项:

typedef enum week{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,  
    Saturday,  
    Sunday
}week_e;

枚举定义

在上面的例子中可以看到,枚举定义的关键字是enum,其定义形式为:

enum 枚举名{

标识符[=整型常数],

标识符[=整型常数],

...

标识符[=整型常数]

} 枚举变量;

中括号内的整型常数可以指定该枚举项的值,如果全部没有指定,则第一个枚举项数值为0,其后依次加1,例如:

typedef enum number{
    a,
    b,
    c,
    d
}number_e;

实际为a=0,b=1,c=2,d=3。

如果给某一个枚举项指定了数值,其后的项在该数值上依次加1,例如:

typedef enum number{
    a,
    b = 3,
    c,
    d
}number_e;

实际为a=0,b=3,c=4,d=5。

允许多个枚举成员具有相同的值,例如:

typedef enum number{
    a,
    b = 3,
    c = 3,
    d
}number_e;

实际为a=0,b=3,c=3,d=4。

枚举使用

我们知道,程序是为现实生活服务的,例如四季、月份、星期、楼栋、社区、颜色等,在本人的工作中,有着大量消息ID,状态机管理,工作模式,通信制式等具有共同属性的一类数据集合,如果单纯的用数字0、1、2...来表示,程序的可读性和可维护性非常差,可能过上几个月,自己都看不懂自己写的程序了,出现问题时也很难快速定位。如果能在程序中用具有相应实际含义的名称来代表某一状态,则程序容易阅读和理解。

这也引出一个问题,即一个枚举中的成员都应该是同一类的,不要把不同表达含义的成员混在一起,不然就失去了使用枚举的意义。例如把星期和社区放在一个枚举类型中,这种时间和空间的混杂显得非常没有条理。

在实际使用中,我们应注意以下几点:

  1. 枚举是常量,不是变量,因此在使用过程中不能再对其进行赋值;
  2. 枚举成员可以为负数,其后成员依然是依次加1;
  3. 直接使用枚举成员名称即可,无需附加枚举名;
  4. 一个枚举成员名称只在整个程序中定义一次,不要重复定义;

枚举举例

#include <stdio.h>
  
typedef enum season{
    SPRING = 1,
    SUMMER,
    AUTUMN,
    WINTER
}season_e;

int main(void)
{
    int season = 4;

    switch (season){
        case SPRING:
            printf("The color of Q%d  is red!\n",SPRING);
        break;
        case SUMMER:
            printf("The color of Q%d is green!\n",SUMMER);
        break;
        case AUTUMN:
            printf("The color of Q%d is yellow!\n",AUTUMN);
        break;
        case WINTER:
            printf("The color of Q%d is white!\n",WINTER);
        break;
        default:
            printf("There is no such season!\n");
        break;
    }

    return 0;
}

运行结果:

The color of Q4 is white!

WINTER是枚举成员,字面意思为“冬季”,实际为数值4。

相关文章
|
9月前
|
安全 算法 C++
【C/C++ 泛型编程 应用篇】C++ 如何通过Type traits处理弱枚举和强枚举
【C/C++ 泛型编程 应用篇】C++ 如何通过Type traits处理弱枚举和强枚举
166 3
|
9月前
|
存储 编译器 Shell
【C++基础语法 枚举】解析 C/C++ 中枚举类型大小值
【C++基础语法 枚举】解析 C/C++ 中枚举类型大小值
114 0
|
9月前
|
安全 算法 编译器
【C++ 泛型编程 入门篇】 C++ 模板元编程之枚举内嵌 实战教程
【C++ 泛型编程 入门篇】 C++ 模板元编程之枚举内嵌 实战教程
180 0
|
9月前
|
安全 算法 编译器
【C++基础语法 枚举】C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法
【C++基础语法 枚举】C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法
121 2
|
程序员 C语言 C++
35.【C/C++ 枚举(bool)类型和宏定义 (超详细)】(二)
35.【C/C++ 枚举(bool)类型和宏定义 (超详细)】
162 0
|
9月前
|
存储 算法 C++
第 284 场周赛(C++ | 枚举 | 分类讨论 | 最短路 | 建反图)
【4月更文挑战第1天】- [LeetCode 6031](https://leetcode-cn.com/problems/find-all-k-distant-indices-in-an-array/):给定数组 `nums`、键值 `key` 和距离 `k`,找到所有与键值相等且与任意下标距离不超过 `k` 的下标,返回升序排序的列表。找到最小权重。
50 0
|
9月前
|
算法 C++ UED
【Qt 常用枚举】深入解析C++中的AlignmentFlag枚举
【Qt 常用枚举】深入解析C++中的AlignmentFlag枚举
167 0
|
9月前
|
存储 安全 算法
【C/C++ std::memory_order 枚举】掌握 C++ 内存模型:深入理解 std::memory_order 的原理与应用
【C/C++ std::memory_order 枚举】掌握 C++ 内存模型:深入理解 std::memory_order 的原理与应用
257 0
|
9月前
|
编译器 数据安全/隐私保护 C++
C++系列十六:枚举
C++系列十六:枚举
|
9月前
|
机器学习/深度学习 人工智能 算法
C++011-C++循环+枚举
C++011-C++循环+枚举
C++011-C++循环+枚举