C语言中enum关键字的实现示例

 更新时间:2024年04月30日 16:44:07   作者:嘻嘻爱编码  
这篇文章主要介绍了C语言中enum关键字的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在 C 语言中,有一种基本数据类型叫做枚举类型,它用于定义一组具有离散值的常量,可以让数据更简洁,更易读。枚举类型通常用于为程序中的一组相关的常量取名字,以便于程序的可读性和维护性。本文将介绍 C 语言中的 enum 关键字,它是用来定义枚举类型的。

定义枚举类型

要定义一个枚举类型,需要使用 enum 关键字,后面跟着枚举类型的名称,以及用大括号 {} 括起来的一组枚举常量。每个枚举常量可以用一个标识符来表示,也可以为它们指定一个整数值,如果没有指定,那么默认从 0 开始递增。枚举语法定义格式为:

enum 枚举名 { 枚举元素1, 枚举元素2, ... };

例如,我们可以定义一个表示一周七天的枚举类型,如下:

enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };

这里,我们为第一个枚举元素 MON 指定了值为 1,那么后面的枚举元素的值就依次递增,即 TUE 为 2,WED 为 3,依此类推。如果我们不指定任何枚举元素的值,那么默认从 0 开始,即 MON 为 0,TUE 为 1,等等。

我们也可以在定义枚举类型时改变枚举元素的值,例如:

enum SEASON { SPRING, SUMMER=3, AUTUMN, WINTER };

这里,我们为 SUMMER 指定了值为 3,那么后面的枚举元素的值就在前一个元素的基础上加 1,即 AUTUMN 为 4,WINTER 为 5。注意,前面的枚举元素 SPRING 的值仍然是默认的 0。

定义枚举变量

定义了枚举类型后,我们就可以用它来定义枚举变量,用来存储枚举类型的值。我们可以通过以下三种方式来定义枚举变量:

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

enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
enum DAY day;

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

enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } day;

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

enum { MON=1, TUE, WED, THU, FRI, SAT, SUN } day;

注意,同一个程序中不能定义同名的枚举类型,不同的枚举类型中也不能存在同名的枚举元素。例如,以下两种声明都是错误的:

// 错误声明一:存在同名的枚举类型
enum WEEKDAY { MON, TUE, WED, THU, FRI };
enum WEEKDAY { SAT, SUN };

// 错误声明二:存在同名的枚举元素
enum WEEKDAY { MON, TUE, WED, THU, FRI };
enum WEEKEND { SAT, SUN, MON };

使用枚举类型的变量

定义了枚举变量后,我们就可以对它进行赋值和使用了。有以下几点需要注意:

对枚举变量赋值时,可以直接使用枚举元素的标识符,也可以使用整数值,但是需要进行类型转换。例如:

enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
enum DAY day;
day = WED; // 直接使用枚举元素
day = (enum DAY) 3; // 使用整数值,需要类型转换

使用枚举变量时,可以将它作为整数值来处理,也可以用它来进行条件判断或 switch 语句。例如:

enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
enum DAY day;
day = WED;
printf("%d\n", day); // 输出 3
if (day == WED) {
    printf("Today is Wednesday\n"); // 输出 Today is Wednesday
}
switch (day) {
    case MON: printf("Monday\n"); break;
    case TUE: printf("Tuesday\n"); break;
    case WED: printf("Wednesday\n"); break;
    case THU: printf("Thursday\n"); break;
    case FRI: printf("Friday\n"); break;
    case SAT: printf("Saturday\n"); break;
    case SUN: printf("Sunday\n"); break;
    default: printf("Invalid day\n");
}

在 C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的,所以按照 C 语言规范是没有办法遍历枚举类型的。不过在一些特殊的情况下,枚举类型必须连续是可以实现有条件的遍历。例如:

enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
enum DAY day;
// 遍历枚举元素
for (day = MON; day <= SUN; day++) {
    printf("枚举元素:%d\n", day);
}

枚举类型的大小

在 C 语言中,枚举类型的大小是由编译器决定的,一般来说,它是按照 int 型或者 unsigned int 型来存储的,所以它的大小通常是 4 个字节。我们可以用 sizeof 运算符来查看枚举类型的大小,例如:

enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
enum DAY day;
printf("sizeof enum DAY: %d\n", sizeof(enum DAY)); // 输出 4
printf("sizeof day: %d\n", sizeof(day)); // 输出 4

枚举类型和 #define 宏的区别

最后,我们来看看枚举类型和 #define 宏的区别,它们都可以用来定义一组常量,但是有以下几点不同:

  • #define 宏常量是在预编译阶段进行简单替换,枚举常量则是在编译的时候确定其值。
  • 一般在编译器里,可以调试枚举常量,但是不能调试宏常量。
  • 枚举可以一次定义大量相关的常量,而 #define 宏一次只能定义一个。

总之,枚举类型是 C 语言中的一种有用的数据类型,它可以让我们的程序更加清晰和规范,也可以避免一些魔法数字的出现。

到此这篇关于C语言中enum关键字的实现示例的文章就介绍到这了,更多相关C语言 enum关键字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • QT中如何读写ini配置文件

    QT中如何读写ini配置文件

    ini文件在windows系统中可以存储需要持久保存的配置信息,QT界面中如何实现手动读取参数存放的位置,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • C语言自动生成enum值和名字映射代码

    C语言自动生成enum值和名字映射代码

    这篇文章主要介绍了C语言自动生成enum值和名字映射代码的相关资料,需要的朋友可以参考下
    2015-12-12
  • 算法详解之分支限界法的具体实现

    算法详解之分支限界法的具体实现

    这篇文章主要介绍了算法详解之分支限界法的具体实现,需要的朋友可以参考下
    2014-02-02
  • 解析在Direct2D中画Bezier曲线的实现方法

    解析在Direct2D中画Bezier曲线的实现方法

    本篇文章是对在Direct2D中画Bezier曲线的实现方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言实现快速排序

    C语言实现快速排序

    这篇文章主要为大家详细介绍了C语言实现快速排序算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • 浅析VC++中的头文件包含问题

    浅析VC++中的头文件包含问题

    类中尽量采用指针或引用方式调用其它类,这样就可以只声明class xxx了。并且这也符合资源最优利用,更利于使用多态
    2013-09-09
  • 详解C++中变量的初始化规则

    详解C++中变量的初始化规则

    这篇文章详细介绍了关于C++中变量的初始化规则,C++如果不对变量初始化,可能会导致很多后果,所以学习C++变量初始化规则就很重要了,下面一起来看看
    2016-08-08
  • C++ 通过指针实现多态实例详解

    C++ 通过指针实现多态实例详解

    这篇文章主要介绍了 C++ 通过指针实现多态实例详解的相关资料,需要的朋友可以参考下
    2017-03-03
  • C++ COM编程之QueryInterface函数(一)

    C++ COM编程之QueryInterface函数(一)

    这篇文章主要介绍了C++ COM编程之QueryInterface函数(一),QueryInterface是组件本身提供对自己查询的一个接口,需要的朋友可以参考下
    2014-10-10
  • C++类型转换归纳总结

    C++类型转换归纳总结

    这篇文章主要介绍了C++类型转换归纳总结,通过本文可以加深读者对于C++变量类型及其相互转换方法的理解,需要的朋友可以参考下
    2014-07-07

最新评论