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

相关推荐
Max_uuc8 分钟前
【C++ 硬核】打破嵌入式 STL 禁忌:利用 std::pmr 在“栈”上运行 std::vector
开发语言·jvm·c++
故事不长丨9 分钟前
C#线程同步:lock、Monitor、Mutex原理+用法+实战全解析
开发语言·算法·c#
牵牛老人11 分钟前
【Qt 开发后台服务避坑指南:从库存管理系统开发出现的问题来看后台开发常见问题与解决方案】
开发语言·qt·系统架构
froginwe1120 分钟前
Python3与MySQL的连接:使用mysql-connector
开发语言
灵感菇_38 分钟前
Java HashMap全面解析
java·开发语言
杜子不疼.40 分钟前
PyPTO:面向NPU的高效并行张量编程范式
开发语言
lly20240640 分钟前
C# 结构体(Struct)
开发语言
YMWM_1 小时前
python3继承使用
开发语言·python
Once_day1 小时前
C++之《程序员自我修养》读书总结(1)
c语言·开发语言·c++·程序员自我修养