Skip to content

2.11.4 枚举

2.11.4 枚举

枚举是用来给一些 int 值起名字的。

它的写法和结构体有点类似,但用途和储存方式与结构体完全不同。

其实,定义一个枚举,根本不会占用任何内存空间。它就只是让编译器认识一下,我把整数 1 起了一个名字叫 XXX2 起了一个名字叫 YYY ,等等。

定义

定义枚举数据类型: enum 集合名{内容};

例如

enum months {
    JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
};

这样会让 JAN0 的别名,FEB1 的别名,以此类推。

如果想让 JAN1 的别名,FEB2 的别名,可以这样写:

enum months {
    JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
};

枚举的应用

枚举的应用有很多,这里我们就用一个比较常见的状态管理来做例子

比如说,我们要做一个游戏,那么我就需要有一个主菜单界面,有一个游戏界面 或者还有什么其他各种乱七八糟的界面

我们可能有三种不同的界面,我们可以分别用 012 来指代它们。但它们其实应该有着有意义的名字,此时枚举就派上用场了。

我们就可以用枚举来实现不同界面之间的切换。

typedef enum GameScreen
{
    MENU,
    DIFFUCLTYCHOOSE,
    SINGLEPLAYER
} gameScreen; // 不同情况下的屏幕界面,分别是主菜单、难度选择、单人游戏

// 游戏主循环
int main(void)
{
    // 初始化部分

    // 游戏主循环
    while (/*游戏关闭前一直循环*/)
    {
        switch (currentScreen)
        {
        case MENU:
        {
           //主菜单对应函数
           break;
        }
        case DIFFUCLTYCHOOSE:
        {
            //难度选择对应函数
            break;
        }
        case SINGLEPLAYER:
        {
            //单人游戏对应函数
            break;
        }
        }
    }
    return 0;
}

因为枚举定义出的是常量,所以它们可以用在 switch 语句的 case 中。