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 的大小(取决于编译器实现)。

相关推荐
露天赏雪14 小时前
Java 高并发编程实战:从线程池到分布式锁,解决生产环境并发问题
java·开发语言·spring boot·分布式·后端·mysql
CoderCodingNo14 小时前
【GESP】C++五级练习题 luogu-P3353 在你窗外闪耀的星星
开发语言·c++·算法
定偶14 小时前
mysql
c语言·数据库·mysql
NMIXX爻14 小时前
线程控制 下
java·开发语言·jvm
Howrun77714 小时前
C++ 类间交互
开发语言·c++
idontknow23314 小时前
DPDK学习笔记(1):二层转发应用例代码解析
c语言·网络·笔记·学习
2401_8576835414 小时前
C++代码静态检测
开发语言·c++·算法
2401_8384725114 小时前
内存泄漏自动检测系统
开发语言·c++·算法
开发者小天15 小时前
python中的class类
开发语言·python
2501_9333295515 小时前
Infoseek数字公关AI中台技术解析:如何构建企业级舆情监测与智能处置系统
开发语言·人工智能