C语言中的枚举(enum)类型
枚举变量是C语言中的一种数据结构,在C++和Java等衍生语言(用词好像不太恰当)中也有这种类型。顺便叨叨一下C语言中三种主要数据结构阐述类型:
- 结构体
struct
- 联合体
union
- 枚举变量
enum
其中结构体由于其高度简洁兼实用的特点,结构体广泛被应用,Linux内核、嵌入式开发中几乎遍地都是。联合体因为应用场景不多,基本很少用到(甚至都忘了是做什么用的)。枚举变量的使用没有结构体那样广泛,但是在如此简洁的C中存在了那么多年都有它的立足之地,足以说明它还是有相当的使用价值的。
对枚举类型的简单说明
枚举,enum是enumeration
的缩写,中文解释的话枚举大概是例举的同义词,用来列举某一类别可能拥有的全体成员。
enumeration
在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。是一个被命名的整型常数的集合,枚举在日常生活中很常见,例如表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举。
枚举类型的特点
枚举类型和结构体不同,结构体为每个成员都分配了空间,所以一个struct
内部的所有变量都可以被赋值,而枚举变量只占用一个整型变量的空间,所以一个枚举变量只能被赋予一个成员值。
应用场景
枚举变量常常用来列举某一个类型的成员。
typedef enum
{
RESET = 0,
SET = !RESET
} FlagStatus, ITStatus;
typedef enum
{
DISABLE = 0,
ENABLE = !DISABLE
} FunctionalState;
#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
typedef enum
{
ERROR = 0,
SUCCESS = !ERROR
} ErrorStatus;
一些技巧或经验
- 常用
typedef
定义枚举类型 - 可以为第一个成员赋整型初值,后面的成员依次取上一个成员变量值+1
- 可以使用逻辑表达式定义成员
- enum变量内部的成员名可以直接被引用,如
typedef enum
{
ERROR = 0,
SUCCESS = !ERROR
} ErrorStatus;
ErrorStatus status = SUCCESS;