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 fputc
enum weekday
{
sun,//默认是0开始 后面依次递增
mon,
tue,
wed,
thu,
fri,
sat
};
enum weekday workday;
int main(void)
{
workday = mon;
printf("workday = %d\r\n",workday);
return0;
}
枚举注意事项
- 在编译中,对枚举元素按常量处理,它们不是变量,不能对它们赋值。
- 枚举元素作为常量,它们是有值的,语言编译按定义时的顺序使它们的值为0,1,2,…。
- 枚举值可以用来做判断比较。如: if(workday = = mon)… if(workday > sun)…
- 一个整数不能直接赋给一个枚举变量。应先进行强制类型转换才能赋值。如:workday = (enum ewwkday)2;
单片机中使用枚举的例子
描述GPIO工作模式的枚举
/**
* @brief GPIO Configuration Mode enumeration
*/
typedefenum
{
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
*/
typedefenum
{
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;
至此,枚举的简单介绍就到这了。