c语言枚举类型

枚举与宏定义的关系

枚举和宏定义是C/C++编程中常用的两种预处理方式,它们有一些相似之处,但也有一些不同。

相似之处:

  1. 都是在编译前进行的文本替换,用于定义常量。
  2. 都可以提高代码的可读性和可维护性。

不同之处:

  1. 声明方式不同:枚举使用关键字"enum"来声明,宏定义使用预处理指令"#define"来声明。
  2. 数据类型不同:枚举在编译时会被转换为整型常量,本质上是常量,所以不能对其进行赋值、取地址操作;而宏定义没有明确的数据类型。
  3. 可读性不同:枚举可以给常量赋予有意义的名称,提高代码的可读性;而宏定义只是简单的文本替换,不会改变可读性。
  4. 可维护性不同:枚举可以在需要时进行扩展,添加新的常量;而宏定义无法扩展或修改。
  5. 使用方式不同:枚举常用于定义一组相关的常量,例如星期几、颜色等;而宏定义常用于定义一些简单的常量或函数宏。
  6. 编译器处理方式不同:枚举在编译时会进行类型检查,可以发现一些常量类型错误;而宏是在预处理阶段将名字换成了值,宏定义只是简单的文本替换,不会进行类型检查。

总的来说,枚举更适用于定义一组相关的常量,提高代码的可读性和可维护性;而宏定义更适用于定义一些简单的常量或函数宏,提高代码的效率。枚举类型的这些名字不是变量,它们不会占据任何内存。且这些名字的有效范围是全局的,如果有变量等命名冲突了可能导致编译不过。

枚举常量的声明符

我们使用enum关键词来创建一个新的类型,这个类型里面包含了多个元素。

我们利用enum创建一个新的枚举类型。这里有两个注意的点,第一,每一个枚举元素后面是英文逗号’,'如果你写成了分号“;”或者中文的逗号“,”都会出现问题。第二,每次建立完枚举类型之后,都需要在大括号{}后面加一个分号“;”

enum 枚举类型名 {
    常量名1 =1,
    常量名2 =2,
    常量名3 =3,
    ...
};
 
enum Weekday {
    Sunday = 0,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
};
 //在这个例子中,Sunday的值是0,Monday的值是1,依此类推  
 //其实不设置为默认第一个也是0开始

枚举类型 Weekday 本身占用的内存大小与里面元素的数量没有直接关系。无论枚举中定义了多少个元素,枚举类型的变量通常都会占用相同的内存大小,这个大小取决于其底层类型,通常是整型(int)。

枚举常量的赋值

默认为从0开始,第一个为0,以此类推。
自定义赋值:

enum Season {
    SPRING,   // 默认值为0
    SUMMER=3, // 指定值为3
    AUTUMN,   // 值为SUMMER+1=4
    WINTER    // 值为AUTUMN+1=5
};

枚举常量的应用

枚举常量在嵌入式中出现比较方便。看下面图片,我们有一个IE中断运行寄存器。从最低位B0到最高位B7,有七个bit位。每一位表示进行一个操作,很明显我们难以记下来。那怎么办呢?枚举就是最好的办法
在这里插入图片描述
如下为枚举之后的代码。很明显,如果我们想打开寄存器中的某一个位,就不需要再去看数据手册了,直接根据这个枚举就很轻松的可以随意操作。

#include <stdio.h>
enum IE
{
	EX0    = 0x01,//0000 0001
	ET0    = 0x02,//0000 0010
	EX1    = 0x04,//0000 0100
	ET1    = 0x08,//0000 1000
	ES     = 0x10,//0001 0000
	ET2    = 0x20,//0010 0000
	Retain = 0x40,//0100 0000
	EA     = 0x80 //1000 0000
};
 
 
 
int main()
{
	int Select_IE = EX0;
	if (Select_IE == EX0)
	{
		printf("EX0\n");
	}
	if (Select_IE == ET0)
	{
		printf("ET0\n");
	}
	if (Select_IE == EX1)
	{
		printf("EX1\n");
	}
	return 0;
}

————————————————
参考链接:https://blog.csdn.net/qq_63922192/article/details/127324040

  • 19
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值