C 枚举
目标
在本文章中,您将学习如何使用C enum
关键字来定义增强代码可读性的枚举类型。
介绍C enum
假设您需要编写一个程序来管理软件缺陷。要表示错误状态,如公开、分配和修复,可以使用整数常量。例如:
#include <stdio.h>
int main()
{
// define the status of a bug
int bug_status;
// 公开
bug_status = 0;
// 分配
bug_status = 1;
// 修复
bug_status = 2;
return 0;
}
复制代码
这个解决方案肯定有效。然而,代码并不是那么明显。
要检查一个bug是否是新的,您需要将bug_status变量与0进行比较。看着数字0,你不会马上理解它的意思。
为了解决这个问题,C提供了允许声明枚举的枚举类型。
枚举是一组命名的整型常量。下面的程序定义了一个名为STATUS的枚举类型和一个名为STATUS的变量bug_status:
enum STATUS { open, assigned, fixed } bug_status;
之后,bug_status可以接受枚举中指定的任何值。例如:
bug_status = open;
下面的程序与上面的程序相同,但使用了枚举:
#include <stdio.h>
int main()
{
// 定义错误状态枚举
enum STATUS {
open,
assigned,
fixed
} bug_status;
// 公开
bug_status = open;
// 分配
bug_status = assigned;
// 修复
bug_status = fixed;
return 0;
}
复制代码
现在代码看起来很明显,可读性更强了。
C 枚举语法
enum enumeration_type_name
{
// 列表
}
复制代码
下面是定义枚举类型的语法:
在这个语法:
- 首先,在enum关键字之后指定枚举类型的名称。
- 其次,指定以逗号分隔的枚举成员列表。
例如,下面定义了一个名为RGB的枚举类型:
enum RGB { red, green, blue };
从现在开始,你可以像这样声明一个RGB类型的变量:
enum RGB color = green;
或者你可以像这样把枚举类型声明和变量声明结合起来:
enum RGB { red, green, blue } color;
color = green;
复制代码
默认情况下,枚举中的第一个成员是0。下一个成员的值是第一个成员加上1。
在下列枚举中:
enum RGB { red, green, blue };
红色是0,绿色是1,蓝色是2。
若要给枚举的成员赋值,可以使用赋值操作符。例如:
#include <stdio.h>
int main()
{
enum DAY {
monday = 2,
tuesday,
wednesday,
thursday,
friday,
saturday,
sunday
};
enum DAY workday = monday;
return 0;
}
复制代码
在这个例子中,我们隐式地将2赋给了monday。因此,周二为3,周三为4,以此类推。
C枚举和整数
由于枚举成员是整数,可以对它们使用算术运算符。例如:
#include <stdio.h>
int main()
{
enum DAY {
monday = 2,
tuesday,
wednesday,
thursday,
friday,
saturday,
sunday
};
enum DAY workday = monday; // 工作日 是 2
workday = workday + 1; // 工作日 是 3
printf("%d\n", workday); // 3
return 0;
}
复制代码
它是如何工作的。
首先,将monday赋值为workday变量。因为星期一是2,所以工作日也是2。
第二步,增加一个工作日,并显示工作日的值。程序按预期显示。
如果您有一个整数,并且希望将其转换为枚举成员,则需要显式地转换该值。例如:
#include <stdio.h>
int main()
{
enum DAY {
monday = 2,
tuesday,
wednesday,
thursday,
friday,
saturday,
sunday
};
enum DAY workday;
int weekend = 7;
workday = (enum DAY) weekend;
printf("%d\n", workday); // 7
return 0;
}
复制代码
在这个例子中,下面的语句将一个整数转换为enum:
workday = (enum DAY) weekend;
需要注意的是,C语言并不不需要强制类型转换,但是推荐使用。这意味着你可以这样做:
workday = weekend;
总结
- 使用enum关键字声明枚举类型。
- 枚举的第一个成员默认为零。下一个成员将取第一个成员的值加1,以此类推。
- 使用赋值操作符(=)显式地将整数值赋给枚举成员。