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

作者:柒号华仔
个人主页:欢迎访问我的主页
个人信条:星光不问赶路人,岁月不负有心人。
个人方向:专注于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。

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柒号华仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值