枚举类型是经常在代码中看到的变量类型,本文通过简要介绍及测试,解析一下这种类型的变量的基本概念。
一.枚举类型的概念
首先看一下枚举类型的概念,一般来说,枚举类型是一个用户创建的有限范围的整数类型,本质上一个整数int数据类型,但是它仅仅包含一些指定的值的列表,而这些值都用符号常量来表示。同样的,类似于其它变量类型的定义,这些符号常量会和那些具有同样类型的枚举变量一起使用。
二.创建枚举类型及变量
具体如何创建一个枚举类型呢?我们可以创建一个有序列表的常数表,这个常数表中每一个常数标签值都比前一个值大1,第一个数据是0,这是默认的情况。
图1 枚举类型语法定义
图2 枚举类型的示例
如上图2的示例中,我们定义了一个weekday这样一个枚举变量,其中包含七个常数标签,SUN,MON,TUE,WED,THR,FRI,SAT这七个常数标签。默认情况下,它们的值为从0到6的整数。
实际上这里有一种特殊情况,任何一个常数标签,都可以指定为一个具体的值,而后面跟随的标签都会在此基础上顺序增加1,如图3所示。
图3 特殊指定常数标签的值
接下来,我们再说一下枚举变量的定义的方式,一般可以和枚举类型一起写,也可以单独去写变量的定义,如下图4参考。
图4 枚举变量的定义方式
图5 变量定义的方式示例
上图中示例中,第一个例子是定义变量和定义类型放在一起方式,第二个例子是在定义了类型后,就像普通变量一样,单独定义了变量。
图6 不写类型名直接定义变量名的方式
在实际使用枚举类型时,也可以不写类型名,但是这种情况需要将类型定义和变量定义放在一起写。
图7 变量的值的使用
当定义了枚举类型,以及枚举变量后,对于变量的值可以直接使用任何已经包含进去的常数符号,当然也可以使用具体的整数,这个在代码中都是识别的,如图7所示。
三.枚举变量实测
这里我们定义一个枚举变量FilterType,及定义一个枚举变量filter,代码中其它部分功能,由于篇幅所限,我们此处不详述。
图8 定义枚举类型及变量
图9 调试代码查看常数标签
将枚举变量filter赋值一个常数标签,HIGHPASS,我们在调试结果中查看其值。
图10 常数标签的值的显示
在上述结果中,我们可以看出HIGHPASS的值为2,BANDSTOP,LOWPASS,HIGHPASS,BANDPASS的值相应为0,1,2,3满足期望的定义。
此处将filter变量定义为HIGHPASS时,filter=HIGHPASS;
则可以在串口窗口中得到如下结果。
图11 HIGHPASS打印输出
将filter变量定义为LOWPASS时,filter=LOWPASS;
则可以在串口窗口中得到如下结果。
图12 LOWPASS打印输出
以上结果均符合代码设置,通过switch case打印了相关的枚举常数值。
前述部分,我们提到用户可以直接指定常数标签的值,这里我们也测试一下。
图13 灵活定义常数标签的值
图14 调试代码查看枚举标签常数值
图15 常数标签值的查看
通过调试窗口,我们可以看到,人为定义PAUL为4,则BILL为5,人为定义GARY为7,则WEB和BABY为8及9,符合期望的定义,第一个数据ROB还是0.
总结,使用枚举的好处,可以让代码的可读性更好,更方便维护,当需要增加额外的常数表标签值时,可以直接在常数枚举类型列表中增加,而不用更改其它部分的代码。