枚举
在编程的问题中,往往需要用一个变量,来保存某种“状态”,比如之前通过状态机实现语法高亮。
再比如,贪吃蛇中,需要一个变量,来保存他的前进方向。
#define DIR_UP 0
#define DIR_DOWN 1
#define DIR_LEFT 2
#define DIR_RIGHT 3
int nDirection = DIR_UP;
这样做在语法上没有问题,但是在编程逻辑过程中,可能埋下隐患,因为int表示的范围,比我们约定的方向种类,要大的多。
比如说,万一有程序员,无意中写了一下的语句进行赋值:
nDirection = 0;//语法正确,逻辑正确,表示向上
nDirection = 5;//语法正确,逻辑不正确,因为5没有被约定
C语言中,为了解决这种“在限定范围内赋值”的问题,发明了枚举变量类型。
枚举的语法
定义枚举类型:
enum ENUM_DIRECTION/*类型名*/
{
//状态范围
UP,
DOWN,
LEFT,
RIGHT
};
用枚举类型定义变量:
int main(int argc, char* argv[])
{
enum ENUM_DIRECTION eSnakedir;
eSnakedir=DOWN;
return 0;
}
枚举的原理
总之,枚举变量,其实就是在编译时会做范围检查的int类型的变量
enum ENUM_DIRECTION/*类型名*/
{
//状态范围
UP,
DOWN,
LEFT,
RIGHT
};
int main(int argc, char* argv[])
{
enum ENUM_DIRECTION eSnakedir;
eSnakedir=LEFT;
printf("%d, %d", sizeof(eSnakedir), eSnakedir);