枚举使用的总结

目录

枚举变量的默认赋值

枚举可以没有枚举名

枚举定义

使用枚举类型注意


最近在工作中,牵扯到一个关于枚举的使用,特此来总结一下。 (因为在遇到一个实际问题的时候,发现大家都不定义枚举变量名),我是很不理解的,

枚举变量的默认赋值

        枚举变量在未分配初始值的时候,默认情况下,第一个枚举成员的默认值为“0”,后续的枚举成员值为前一个枚举成员的值(按文本顺序)加一。但是,其值必须在基础类型可以表示的值范围内;

枚举类型,通过预定义列出所有值的标识符来定义有序集,其顺序与枚举类型描述中的标识符顺序一致。枚举类型的形式:(标识符1,...,标识符n)。

枚举元素只能是标识符,而不是数字常量或字符常量。枚举在C/C++/c#中,是一个被命名的整型常数的集合, 枚举在日常生活中很常见。例如表示星期的SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY,SATURDAY,就是一个枚举。

默认值如果非连续呢?又该如何?

如:

enum {
    STATION_IDLE = 0,
    STATION_CONNECTING = 8,
    STATION_WRONG_PASSWORD = 3,
    STATION_NO_AP_FOUND = 9,
    STATION_CONNECT_FAIL,
    STATION_GOT_IP
};

那最后两个的值,该是多少呢? 

为了验证这个问题,做个小实验:

#include <iostream>
#include <stdio.h>

using namespace std;

enum egg {a=10,b=5,c,d=8,e};


int main()
{
	printf("a = %d\n", a) ;
	printf("b = %d\n", b) ;
	printf("c = %d\n", c) ;
	printf("d = %d\n", d) ;
    printf("e = %d\n", e) ;
}

运行效果如图:

可见,对于枚举类中的没有存值的变量,默认将其值存为上一个变量所存的值加1。 

枚举可以没有枚举名

如果声明枚举类型时没有指定枚举名,其作用就和#define类似。

enum {
    STATION_IDLE = 0,
    STATION_CONNECTING,
    STATION_WRONG_PASSWORD,
    STATION_NO_AP_FOUND,
    STATION_CONNECT_FAIL,
    STATION_GOT_IP
};

相当于:

#define     STATION_IDLE = 0;
#define     STATION_CONNECTING = 1;
#define     STATION_WRONG_PASSWORD = 2;
#define     STATION_NO_AP_FOUND = 3;
#define     STATION_CONNECT_FAIL = 4;
#define     STATION_GOT_IP = 5;

 如果要表示同一个事件的不同反馈status,使用这种没有枚举名的枚举效果更好。

枚举定义

enum 枚举类型名 {变量值列表};

关键字enum——指明其后的标识符是一个枚举类型的名字。

变量值列表——由枚举量构成,各枚举量之间以“ ,”间隔,且必须各不相同。

举例:

enum Week{
    MONDAY, 
    TUESDAY, 
    WEDNESDAY,
    THURSDAY, 
    FRIDAY, 
    SATURDAY, 
    SUNDAY
}

使用枚举类型注意

枚举中每个成员(标识符)结束符是"," 不是";", 最后一个成员可省略","。

初始化时可以赋负数, 以后的标识符仍依次加1。

枚举变量只能取枚举说明结构中的某个标识符常量。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值