C枚举声明
枚举包含组命名整数常量。 枚举类型声明为 (可选) 枚举标记的名称并定义一组命名整数标识符 (称为 “枚举设置,”数常数,”数,”或 “成员”)。 使用枚举类型的变量存储在一个该类型设置定义的枚举值。
enum 类型的变量可用于索引表达式和作为任何算术和关系运算符的操作数。 枚举提供了一种替代 #define 预处理器指令的优点值可以为您生成和遵循常规范围规则。
在 ANSI C,定义枚举常量值的表达式始终有 int 类型;因此,存储与枚举变量用于单个 int 值所需的存储。 可以使用常量枚举或枚举类型的值的任意位置 C 语言许可证整数表达式。
语法
枚举说明符:
枚举 标识符opt**{** 枚举数列表 }枚举 标识符
选项卡 IDENTIFIER 命名定义的枚举类型的 枚举数列表。 此标识符通常称为 “标记”列表中指定的枚举。 窗体的类型说明符
enum identifier { enumerator-list }
声明 标识符 是 枚举数列表 中指定的枚举的标记非终止符号。 枚举数 列表定义 “数目录”。枚举数列表 下面详细介绍。
如果标记的声明可见,使用标记,但在后面的声明省略 枚举数 列表中指定该以前声明的枚举类型。 标记必须引用已定义的枚举类型,因此,该枚举类型必须在当前范围内。 因为枚举类型在其他地方定义,枚举数 列表 未显示在此说明。 ,在枚举类型定义之前,从枚举和 typedef 声明派生类型的声明枚举类型的能使用枚举标记。
语法
枚举数列表:
枚举数枚举数列表**,** enumerator
enumerator:
枚举常数枚举常量 = 常数表达式
枚举常数:
identifier
每个 枚举数 在 枚举中 的一组命名的枚举的值。 默认情况下,先枚举 常数 与该值 0。 下 枚举常数 在列表中与值 (常数表达式 + 1),因此,除非您显式将其与另一个值。 名称的 枚举常数 与其值是等效的。
可以使用枚举 常数 值 = 重写默认顺序的 常量表达式 。 因此,因此,如果 枚举常数 = 常数表达式 出现在 枚举数列表中, 枚举常数 与 常数表达式会的值。 常数表达式 必须具有 int 类型,并且可以为负。
下列规则适用于设置的枚举的成员:
设置的枚举能包含重复常数值。 例如,可以将一个值 0 与两个不同的标识符,而命名 null 和 zero,在相同的设置。
在枚举标识符列表必须是不同在同一范围的其他标识符与相同的可见性,包括普通变量名,并在其他枚举的标识符的列表。
枚举标记遵循常规范围规则。 它们必须是不同其他枚举、结构和联合用相同的可见性。
示例
这些示例演示枚举声明:
enum DAY /* Defines an enumeration type */
{
saturday, /* Names day and declares a */
sunday = 0, /* variable named workday with */
monday, /* that type */
tuesday,
wednesday, /* wednesday is associated with 3 */
thursday,
friday
} workday;
默认情况下该值 0 与 saturday 。 该标识符 sunday 显式设置为 0。 为默认情况下剩余的标识符值的范围是 1 到 5。
在此示例中,从组的 DAY 的值赋给可变 today。
enum DAY today = wednesday;
请注意枚举常量的名称用于将值。 自 DAY 枚举类型以前声明,因此,只有枚举标记 DAY 是必需的。
显式分配整数值赋给枚举数据类型的变量,请使用转换的类型:
workday = ( enum DAY ) ( day_value - 1 );
此转换建议在 C 中,但这不是必需的。
enum BOOLEAN /* Declares an enumeration data type called BOOLEAN */
{
false, /* false = 0, true = 1 */
true
};
enum BOOLEAN end_flag, match_flag; /* Two variables of type BOOLEAN */
此声明还可以指定
enum BOOLEAN { false, true } end_flag, match_flag;\
或
enum BOOLEAN { false, true } end_flag;
enum BOOLEAN match_flag;
使用这些变量的示例可能如下所示:
if ( match_flag == false )
{
.
. /* statement */
.
}
end_flag = true;
未命名的枚举数数据类型还可能会声明。 数据类型的名称被省略,但是,变量中声明。 可变 response 是定义的类型的变量:
enum { yes, no } response;