枚举常量及其应用

目录

枚举与宏定义的关系

枚举常量基本要素

枚举常量的声明符

枚举常量的默认值

枚举常量的赋值

枚举常量的引用

枚举常量的使用

枚举常量的应用

枚举常量需要注意的地方

不能对枚举常量赋值

不能再定义与枚举常量名字相同的变量

不能用&取得他们的地址


枚举与宏定义的关系

枚举在代码中实现的功能跟使用宏类似,都可以用名字来代替数值。宏是在预处理阶段将名字换成了值,而枚举是在编译阶段将名字换成值。也就是说,枚举类型的这些名字不是变量,它们不会占据任何内存。且这些名字的有效范围是全局的,如果有变量等命名冲突了可能导致编译不过。

枚举常量基本要素

枚举常量的声明符

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

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

enum color
{
	red,
	green,
	yellow
};

枚举常量的默认值

枚举常量默认值是0,1,2依次递增的。

#include <stdio.h>
enum color
{
	red,
	green,
	yellow
};

int main()
{
	printf("%d\n", red);   //0
	printf("%d\n", green); //1
	printf("%d\n", yellow);//2
	return 0;
}

枚举常量的赋值

但是如果我们想给他们赋值,这样写

enum color
{
	red = 2,
	green = 4,
	yellow = 8
};

但是我们又需要注意,如果只给其中一个枚举常量赋值,但是后面的值没有被赋予。那么后的常量会根据被赋予值开始,依次递增。而被赋值前的值从0开始递增。

#include <stdio.h>
enum color
{
	red,
	black,
	green = 4,
	yellow
};

int main()
{
	printf("%d\n", red);    //0,被赋予值之前的从0开始递增
    printf("%d\n", black);  //1
	printf("%d\n", green);  //4,被赋予值之后,从赋予值开始递增
	printf("%d\n", yellow); //5
	return 0;
}

枚举常量的引用

枚举常量的使用

有了枚举常量之后,我们可以这样使用。这样能够方便的得知我所选择的颜色是什么,并且根据所选的颜色进行相对应的操作。

#include <stdio.h>
enum color
{
	red,
	green,
	yellow
};
int main()
{
	int Select_color = red;
	if (Select_color == red)
	{
		printf("red\n");
	}
	if (Select_color == green)
	{
		printf("green\n");
	}
	if (Select_color == yellow)
	{
		printf("yellow\n");
	}
	return 0;
}

枚举常量的应用

但是这个时候有人又会觉得,感觉上面所说的不足以让他信服。据我所知,枚举常量在嵌入式中出现比较方便。看下面图片,我们有一个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;
}

枚举常量需要注意的地方

不能对枚举常量赋值

我们不能对枚举常量赋值,只能讲他们的值赋给其他变量。这个时候有人会有疑惑了,怎么不能赋值呢?明明上面不是说了给枚举常量赋值了吗?其实我们这个地方说不能给枚举常量赋值是说,不能再enum外给枚举常量赋值。

但是我们需要注意,枚举常量可以把自己的值赋予别人。

#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()
{
	EX0 = 30;  //报错,表达式必须是可修改的左值
    int Select_IE = EX0;  //可以,枚举常量的值可以赋予其他变量
	return 0;
}

不能再定义与枚举常量名字相同的变量

#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 EX0;   //报错
	return 0;
}

不能用&取得他们的地址

#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* x = &EX0;  //报错
	return 0;
}

  • 14
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风正豪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值