5.5 C51的枚举

枚举类型是由基本数据类型组合而成,即枚举类型属于聚合数据类型的一种。例如,1个星期内有7天,1年有12个月,每学期有6门课程等。如果把这些量单独定义为整型、字符型或其他类型,则不便于对性质相同的数据进行统一操作,在程序中处理起来不方便。此时若采用枚举类型,不但可以直观地表示其取值范围,而且也节省了存储空间。

5.5.1 枚举和枚举变量的声明

枚举类型主要用于将变量的取值限定在一个有限的范围内的情况。声明枚举类型时,列举出所有可能的取值,被声明为该枚举类型的变量,其取值不能超过该枚举定义的范围。下面分别介绍枚举和枚举变量的声明方法。

1.枚举的声明

在C51语言中,声明枚举类型的一般形式如下。


enum枚举名

{

标识符[=整型常量],

标识符[=整型常量],

……

};


其中,enum为关键字,枚举名即所定义的枚举类型,标识符是枚举类型变量的取值范围,一般为整型常量表达式。

注意与结构、联合体内的成员定义不同,每个枚举元素后的结束符是“,”,而不是“;”。最后一个元素后的结束符可以省略不写。

以1个星期内的7天为例,枚举类型的声明示例如下。


enum weekday//声明枚举类型表示1个星期

{

Monday,//枚举元素0,星期1

Tuesday,//枚举元素1,星期2

Wednesday,//枚举元素2,星期3

Thursday,//枚举元素3,星期4

Friday,//枚举元素4,星期5

Saturday,//枚举元素5,星期6

Sunday,//枚举元素6,星期7

};


本例中,声明枚举名为weekday的枚举类型,该枚举共有7个元素,对应1个星期中的7天。

2.枚举变量的声明

枚举变量是以枚举类型为说明符的变量,其取值只能是其声明的枚举类型中的元素之一。声明枚举类型变量的一般形式如下。


enum枚举名

{

标识符[=整型常量],

标识符[=整型常量],

……

}枚举变量;


可以同时定义多个同一枚举类型的变量,这些变量的取值范围只能是枚举类型所列举的数值。

在C51语言中,与声明结构变量、联合变量一样,也可以采用3种方式声明枚举变量。这3种声明方式表述如下。

❑在声明枚举类型时,同时声明枚举变量,示例如下。


enum weekday//声明枚举类型表示1个星期

{

Monday,//枚举元素0,星期1

Tuesday,//枚举元素1,星期2

Wednesday,//枚举元素2,星期3

Thursday,//枚举元素3,星期4

Friday,//枚举元素4,星期5

Saturday,//枚举元素5,星期6

Sunday,//枚举元素6,星期7

}a,b,c;//声明枚举变量


在C51语言中,凡被声明为weekday类型的变量,其取值只能是7天中的某一天,即枚举变量a、b、c只能取7个枚举元素中的某个值。

❑先声明枚举类型,后声明枚举变量,示例如下。


enum weekday//声明枚举类型表示1个星期

{

Monday,//枚举元素0,星期1

Tuesday,//枚举元素1,星期2

Wednesday,//枚举元素2,星期3

Thursday,//枚举元素3,星期4

Friday,//枚举元素4,星期5

Saturday,//枚举元素5,星期6

Sunday,//枚举元素6,星期7

};

enum weekday a,b,c;//声明3个枚举变量


❑直接声明枚举变量,示例如下。


enum

{

Monday,//枚举元素0,星期1

Tuesday,//枚举元素1,星期2

Wednesday,//枚举元素2,星期3

Thursday,//枚举元素3,星期4

Friday,//枚举元素4,星期5

Saturday,//枚举元素5,星期6

Sunday,//枚举元素6,星期7

}a,b,c;//声明枚举变量


本例中,没有给出枚举名,而直接定义了3个具有枚举类型的变量,这样就不能在同一程序中定义其他枚举变量,容易发生混淆。