vincent@ubuntu:~/ch02/2.5$ cat enum.c -n 1 #include <stdio.h> 2 3 // 定义了一个枚举常量列表 4 enum spectrum {red, green, blue}; 5 6 int main(void) 7 { 8 enum spectrum color; // 定义了一个枚举变量 9 color = green; 10 11 switch(color) 12 { 13 case red: // 使用枚举常量来判断 color 的值 14 printf("red\n"); 15 break; 16 case green: 17 printf("green\n"); 18 break; 19 case blue: 20 printf("blue\n"); 21 break; 22 default: 23 printf("unknown color\n"); 24 } 25 26 return 0; 27 }C 语言中枚举数据是很坑爹的,是一类被阉割了的类型,本来枚举是一种所谓“指定范
围”的整型数据,超出范围便无意义,比如指定颜色变量 color 只能是{1,2,3},分别代表
红绿蓝,给 color 指定别的值在逻辑上应该是讲不通的,因为没有别的颜色了。可惜 C 语
言的枚举纯粹就是整型,可以给他赋任意的整数,并没有体现枚举“指定范围”的特点。
不管如何,上面给出一个范例,展示了如何使用枚举:
上述代码中的第 4 行定义了一个枚举常量列表,事实上在 C 语言中,使用常量有三种
方式:第一,直接使用。第二,宏定义。第三,便是这里的枚举常量,比如例子中的 red、
green 和 blue,代码中并没有给他们赋值,所以他们的值都是缺省的,从 0 开始递增,所
以第 4 行代码相当于:
enum spectrum {red=0, green=1, blue=2};
spectrum 是这个枚举常量列表的标签,作用是可以利用这个标签定义所谓的枚举变量
(事实上就是 int 型变量),如第 8 行所示。之后,我们就可以使用 color 来取得枚举列表
中的各个值了(因为是阉割版的,所以其实你要给 color 赋值为 888 编译器也奈你不何)。
最后明确一点,不管是使用宏来定义常量,还是使用枚举来定义常量,目的只有一个:
增强程序的可读性。