C语言必备知识枚举

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;

至此,枚举的简单介绍就到这了。