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

相关推荐
wjs20241 小时前
JavaScript 语句
开发语言
cmpxr_2 小时前
【C】局部变量和全局变量及同名情况
c语言·开发语言
小碗羊肉3 小时前
【从零开始学Java | 第三十一篇下】Stream流
java·开发语言
aq55356003 小时前
Laravel10.x重磅升级,新特性一览
android·java·开发语言
报错小能手4 小时前
ios开发方向——swift错误处理:do/try/catch、Result、throws
开发语言·学习·ios·swift
网域小星球4 小时前
C 语言从 0 入门(十七)|结构体指针 + 动态内存 + 文件综合实战
c语言·开发语言·文件操作·结构体指针·动态内存·综合项目
aq55356004 小时前
三大编程语言深度对比:C# vs 易语言 vs 汇编
开发语言·汇编·c#
独特的螺狮粉4 小时前
云隙一言:鸿蒙Flutter框架 实现的随机名言应用
开发语言·flutter·华为·架构·开源·harmonyos
光泽雨4 小时前
c# 文件编译的过程
开发语言·c#
赤水无泪5 小时前
09 C++ 11 新增的标准
开发语言