C语言---枚举变量

文章目录

  • [1. 基本定义](#1. 基本定义)
  • [2. 声明枚举变量](#2. 声明枚举变量)
  • [3. 自定义枚举值](#3. 自定义枚举值)
  • [4. 使用 typedef 简化](#4. 使用 typedef 简化)
  • [5. 枚举的特点与优势](#5. 枚举的特点与优势)
  • [6. 实际应用示例:Switch 语句](#6. 实际应用示例:Switch 语句)
  • 7. 枚举 vs #define
  • 注意事项

在C语言中,枚举(Enumeration,简称 enum)是一种基本的数据类型,也是用户自定义的数据类型,用于定义一组具有离散值的常量,它允许你为一组整数值分配有意义的名字。使用枚举可以显著提高代码的可读性和可维护性。

1. 基本定义

枚举通过关键字 enum 定义,其成员默认从 0 开始递增。

bash 复制代码
enum Weekday {
    MON, // 0
    TUE, // 1
    WED, // 2
    THU, // 3
    FRI, // 4
    SAT, // 5
    SUN  // 6
};

1.1、枚举变量定义八股文

先定义枚举类型,再定义枚举变量

bash 复制代码
enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};
enum DAY day;

定义枚举类型的同时定义枚举变量

bash 复制代码
enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;

省略枚举名称,直接定义枚举变量

bash 复制代码
enum
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;

2. 声明枚举变量

定义好枚举类型后,可以创建该类型的变量:

bash 复制代码
enum Weekday today;
today = WED; 

if (today == WED) {
    printf("今天是周三\n");
}

3. 自定义枚举值

你可以手动指定枚举成员的值。如果某个成员未指定,它将比前一个成员大 1。

bash 复制代码
enum State {
    SLEEP = 1,
    RUNNING = 5,
    STOP,      // 自动变为 6
    ERROR = -1
};

4. 使用 typedef 简化

在C语言中,每次声明变量都要写 enum 比较繁琐,通常配合 typedef 使用:

bash 复制代码
typedef enum {
    RED,
    GREEN,
    BLUE
} Color;

Color myColor = RED; // 不再需要写 enum 关键字

5. 枚举的特点与优势

1、本质是整数:在编译器内部,枚举成员被当作 int 处理。这意味着你可以直接在 printf 中打印它们,或者在 switch 语句中使用。

2、提高可读性:用 COLOR_RED 代替数字 0,使代码意图更明显。

3、类型安全(弱):虽然枚举本质是整数,但它在逻辑上将一组相关的常量归类。

4、调试友好:在调试器中,通常可以看到枚举的名字而不是冷冰冰的数字。

6. 实际应用示例:Switch 语句

枚举与 switch 是绝配,常用于处理状态机或选项。

bash 复制代码
#include <stdio.h>

typedef enum {
    CMD_START,
    CMD_STOP,
    CMD_PAUSE
} Command;

void handleCommand(Command cmd) {
    switch (cmd) {
        case CMD_START: printf("启动中...\n"); break;
        case CMD_STOP:  printf("停止中...\n"); break;
        case CMD_PAUSE: printf("暂停中...\n"); break;
    }
}

int main() {
    handleCommand(CMD_START);
    return 0;
}

7. 枚举 vs #define

虽然 #define 也可以定义常量,但枚举有以下优点:

自动赋值:不需要手动为每个常量写数字。

作用域限制:枚举遵循变量的作用域规则,而宏是全局替换。

分组:枚举将相关的常量组织在一起,形成一个独立的类型。

类型检查:枚举变量赋值或判断会进行类型检查,不会报错但是会在Waring或者代码品质对应时体现。

注意事项

1、枚举成员的名字在同一作用域内必须是唯一的(不能有两个不同的枚举类型包含同名的成员)。可以认为枚举变量类似于宏定义,所以和宏定义一样不能重复。

2、枚举变量的大小通常等同于 int 的大小(取决于编译器实现)。

相关推荐
李慕婉学姐20 小时前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
吃茄子的猫20 小时前
quecpython中&的具体含义和使用场景
开发语言·python
云栖梦泽20 小时前
易语言中小微企业Windows桌面端IoT监控与控制
开发语言
数据大魔方20 小时前
【期货量化实战】日内动量策略:顺势而为的短线交易法(Python源码)
开发语言·数据库·python·mysql·算法·github·程序员创富
Edward.W1 天前
Python uv:新一代Python包管理工具,彻底改变开发体验
开发语言·python·uv
小熊officer1 天前
Python字符串
开发语言·数据库·python
月疯1 天前
各种信号的模拟(ECG信号、质谱图、EEG信号),方便U-net训练
开发语言·python
荒诞硬汉1 天前
JavaBean相关补充
java·开发语言
提笔忘字的帝国1 天前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos