第三章:数据类型-5枚举型

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,以此类推。
  • 使用赋值操作符(=)显式地将整数值赋给枚举成员。
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享