C语言必备知识枚举体
枚举类型是ANSI C新标准所增加的。如果一个变量只有几种可能的值,可以定义为枚举类型。所谓“枚举是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。
枚举的定义形式
enum 枚举类型名
{枚举元素列表
}枚举变量列表;可以先声明类型再定义变量,也可以同时进行
举例
//先声明类型再定义变量
enum weekday
{sun,mon,tue,wed,thu,fri,sat
};enum weekday workday,week_end;//声明类型同时定义变量
enum
{sun,mon,tue,wed,thu,fri,sat
} workday,week_end;
枚举的使用
#include <stdio.h> //printf scanf fputcenum weekday
{sun,//默认是0开始 后面依次递增 mon,tue,wed,thu,fri,sat
};
enum weekday workday;
int main(void)
{workday = mon;printf("workday = %d\r\n",workday);return 0;
}
枚举注意事项
- 在编译中,对枚举元素按常量处理,它们不是变量,不能对它们赋值。
- 枚举元素作为常量,它们是有值的,语言编译按定义时的顺序使它们的值为0,1,2,…。
- 枚举值可以用来做判断比较。如: if(workday = = mon)… if(workday > sun)…
- 一个整数不能直接赋给一个枚举变量。应先进行强制类型转换才能赋值。如: workday = (enum ewwkday)2;
单片机中使用枚举的例子
描述GPIO工作模式的枚举
/** * @brief GPIO Configuration Mode enumeration */
typedef enum
{ GPIO_Mode_IN = 0x00, /*!< GPIO Input Mode */GPIO_Mode_OUT = 0x01, /*!< GPIO Output Mode */GPIO_Mode_AF = 0x02, /*!< GPIO Alternate function Mode */GPIO_Mode_AN = 0x03 /*!< GPIO Analog Mode */
}GPIOMode_TypeDef;
描述GPIO工作速度的枚举
/** * @brief GPIO Output Maximum frequency enumeration */
typedef enum
{ GPIO_Low_Speed = 0x00, /*!< Low speed */GPIO_Medium_Speed = 0x01, /*!< Medium speed */GPIO_Fast_Speed = 0x02, /*!< Fast speed */GPIO_High_Speed = 0x03 /*!< High speed */
}GPIOSpeed_TypeDef;
至此,枚举的简单介绍就到这了。