枚举深入解析
1、枚举的本质
(1)枚举在C语言中其实是一些符号常量集。直白点说:枚举定义了一些符号,这些符号的本质就是int类型的常量,每个符号和一个常量绑定。编译器对枚举的认知就是符号常量所绑定的那个int类型的数字。
(2)枚举中的枚举值都是常量。枚举符号常量和其对应的常量数字相对来说,数字不重要,符号才重要。
(3)枚举值
- 在 C 语言中,枚举(
enum
)类型的定义里允许给不同的成员赋相同的整数值,这是语法上完全合法的。也就是说,两个枚举成员的名字可以对应同一个常量值。 - 虽然合法,但通常不推荐这么做,除非你有明确理由(比如为了兼容旧代码、别名等),否则会降低代码可读性。
- 不指定枚举所对应的数字,让编译器自动分配,编译器自动分配的原则是:从0开始依次增加。如果用户自己定义了一个值,则从那个值开始往后依次增加。
2、C语言为何需要枚举?
(1)代码的可读性:枚举提供了一个有意义的名字来表示一组相关的常量,这使得代码更加易于理解和维护。
3、宏定义和枚举的区别
(1)宏定义和枚举都可以用一个有意义的名字来表示一个常量,但两者还是有区别的:
- 枚举是将多个有关联的符号封装在一个枚举中,而宏定义是完全散的;
- 当我们要定义的常量是一个有限集合时,适合用枚举;
- 定义的常量符号之间无关联,不适合用枚举。