5-9枚举

枚举在C语言中提供了一种定义符号常量集的方式,它是一组具有int类型常量的集合,方便程序员通过有意义的符号代替数字。枚举常量默认从0开始自动分配,也可自定义值。宏定义与枚举类似,两者可以互换使用,但枚举更适合定义有限且有关系的符号常量集合。在不能用枚举或者常量间无关联时,可以选择宏定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

5.9.1 枚举是用来干嘛的?

(1)枚举在C语言中其实是一个符号常量集。直白点说:枚举定义了一些符号,这些符号的本质就是int类型的常量,每个符号和一个常量绑定。这个符号就表示一个自定义的一个识别码,编译器对枚举的认知就是符号常量所绑定的那个int类型的数字。
(2)枚举中的枚举值都是常量,怎么验证?
(3)枚举符号常量和其对应的常量数字相对来说,数字不重要,符号才重要。符号对应的数字只要彼此不相同即可,没有别的要求,所以一般情况下我们都不明确制定这个符号所对应的数字,而让编译器自动分配。(编译器自动分配的原则是:从0开始依次增加。如果用户自己定义了一个值,则从那个值开始往后依次增加)

#include <stdio.h>
//这个枚举用来表示函数的返回值,ERROR表示错,RIGHT表示对
enum return_value
{	
	ERROR,		//枚举值常量是全局的,直接自己就可以用	
	RIGHT,
};
enum return_value func1(void);
int main(void)
{	
	enum return_value r = func1();	
	if(r == RIGHT)	//不是r.RIGHT,也不是return_value.RIGHT	
	{		
		printf("函数执行正确\n");	
	}	
	else	
	{		
		printf("函数执行错误\n");	
	}	
	printf("ERROR = %d\n",ERROR);	
	printf("RIGHT = %d\n",RIGHT);	
	return 0;
}
enum return_value func1(void)
{	
	enum return_value r1;	
	r1 = RIGHT;	
	return r1;
}

5.9.2 C语言为何需要枚举

(1)C语言没有枚举是可以的。使用枚举其实就是对1、0这些数字进行符号化编码,这样的好处就是编程时可以不用看数字而直接看符号。符号的意义是显然的,一眼可以看出。而数字所代表的含义除非看文档或者注释。
(2)宏定义的目的和意义是:不用数字而用符号。从这里可以看出:宏定义和枚举有内在联系。宏定义和枚举经常用来解决类似的问题,他们俩基本可以互换,但是有一些细微差别。

5.9.3 宏定义和枚举的区别

(1)枚举是将多个有关联的符号封装在一个枚举中,而宏定义是完全散的。也就是说枚举其实是多选一。
(2)什么情况下用枚举?当我们要定义的常量是一个有限集合时(譬如一星期有7天,譬如一个月有31天,譬如一年有12个月…),最适合用枚举。(其实宏定义也行,但是枚举更好)
(3)不能用枚举的情况下(定义的常量符号之间无关联,或者无限的)用宏定义。
总结:宏定义先出现,用来解决符号常量的问题,后来人们发现有时候定义的符号常量彼此之间有关联(多选一的关系),用宏定义来做虽然可以但是不贴切,于是乎发明了枚举来解决这种情况。

5.9.4 枚举的定义和使用

(1)这个可以自己下来查找资料,自己学习,总结成一个文档,写测试代码,测试代码的结果,总结结论。(学习的东西永远是靠自己的,不能靠任何人被动的接受)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

非主流的豆瓣

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

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

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

打赏作者

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

抵扣说明:

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

余额充值