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

·  阅读 64
【C/C++】一文了解枚举使用

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

​作者:[柒号华仔]

个人信条:星光不问赶路人,岁月不负有心人。

个人方向:专注于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。

收藏成功!
已添加到「」, 点击更改