枚举是基本数据类型之一,有的版本也把它作为符合数据类型,它是一组被命名的整型常数,枚举类型在工程应用中非常广泛。
在实际应用中,某些变量需要被限定在一定的范围内,如世界有 7 大洲,地球有 24 小时,一周有 7 天,一年有 12 个月等。这些范围很难以整型、实型或字符型加以说明,因此,为满足能够表达某组数据列表的需求,C语言提供了枚举类型。
枚举类型的定义使用关键字enmu,其一般形式为:
用户标识符即指枚举名,在枚举参数表列中应罗列出所有需要的值,这些值也称为枚举元素。例如:
该枚举类型名为world,共有 7 个枚举值。凡被声明为world类型的枚举变量,取值只能为枚举参数表列之一。
枚举变量可以先定义后声名,也可以在定义枚举类型的同时声明枚举变量。仍然以大洲名称为例,如下形式定义枚举类型同时声明枚举变量x,y,z。
如下形式为先定义枚举类型,后声明枚举变量。
需要说明的是,枚举参数表列中的值为常量,不是变量,因此其值不能被修改。因此,对枚举world中的元素的如下操作是非法的。
若程序中在枚举类型定义时没有对元素进行值对应,系统为枚举类型的每个元素顺序编号,并从 0 开始递增赋值,如上述定义中Asia的值为 0,Europe的值为 1,Antarctica的值为 6。
枚举可在定义时对元素进行值对应,通常也称为将某个值赋给元素。
范例 2.20
EnumValueTest.c
EnumValueTest.c 假定各大洲每年的工业产值单位为万亿¥,定义枚举类型数据,用于存储各大洲的工业产值状况,例如,亚洲为 500 万亿¥。
(光盘\chat2\ EnumValueTest.c)
程序第 6 行首先将整数 500 赋给枚举元素Asia,因此元素Europe将在前一元素基础上增1,变为 501。元素Africa被赋值为-100 之后,元SouthAmerica变为-99,同时NorthAmerica重新赋值为 800。同样,元素Oceania被赋值为 66 之后,Antarctica变为 67,而经过第 22 行算术运算之后,en_calc的值变为 901。程序运行输出结果:
枚举类型元素不能赋值为实型常量,如程序中第 6 行改为Asia = 500.5,程序将出现编译错误。也不能试图在枚举定义之后修改元素的值,若在程序 21 行后添加Asia = 10,程序同样出现非法错误,原因是Asia是一个常量,其值不允许再次改变。