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关键字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!