核心内容摘要
甘雨“被盗宝团挤奶”
vincentubuntu:~/ch02/
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 {red0, green1, blue2};spectrum 是这个枚举常量列表的标签作用是可以利用这个标签定义所谓的枚举变量事实上就是 int 型变量如第 8 行所示。
之后我们就可以使用 color 来取得枚举列表中的各个值了因为是阉割版的所以其实你要给 color 赋值为 888 编译器也奈你不何。
最后明确一点不管是使用宏来定义常量还是使用枚举来定义常量目的只有一个增强程序的可读性。