1.定义
对于有限的情况,一一列举
如一周有7天,从周一到周日;光学三原色(Red Green Blue)
2.格式
enum 枚举类型名
{
//枚举常量
};
备注:enum为enumeration缩写
3.枚举成员变量的值
#include <stdio.h>
enum color
{
Red,
Green,
Blue
};
int main()
{
printf("%d,%d,%d", Red, Green, Blue);
return 0;
}
默认情况下,从上至下,枚举常量的取值依次为0,1,2,3,4,其值不可修改,但可以赋初值
枚举常量的值不可修改
写成下面这样会报错
int main()
{
Red = 2;
printf("%d,%d,%d", Red, Green, Blue);
return 0;
}
赋初值的示例
#include <stdio.h>
enum color
{
Red=3,
Green,
Blue
};
int main()
{
printf("%d,%d,%d", Red, Green, Blue);
return 0;
}
#include <stdio.h>
enum color
{
Red,
Green=3,
Blue
};
int main()
{
printf("%d,%d,%d", Red, Green, Blue);
return 0;
}
从上方的两段代码可以发现:成员变量的值从一开始赋初值的位置开始递增
4.优点
5条优点
1.增加代码的可读性和可维护性
2. 和#define定义的标识符比较,枚举有类型检查(检查是否为枚举类型),更加严谨
像#define Red 0这样的定义,Red是没有类型的
3. 便于调试,预处理阶段会删除#define定义的符号
4. 使用方便,一次可以定义多个常量(逗号隔开定义)
5. 枚举常量是遵循作用域规则的,枚举声明在函数内,只能在函数内使用
像#define Red 0这样的定义是全局的
补充说明:类型检查
下列代码保存为*,cpp运行
enum Color { Red, Green, Blue }; int main() { enum Color Col = 0; return 0; }
Col = 0;的0默认为int类型,而Col为枚举类型,因此不行
但在C语言编译器不会报错,原因是C语言的类型检查不严谨
如果改成
enum Color Col = Red;
则没有问题