C语言关键字浅析-enum

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Johan_Joe_King/article/details/83986719

### C语言关键字浅析系列 ###

### ISO/ANSI C 关键字 ###

enum关键字的原型是enumerated type,意思是枚举类型

这是ISO/ANSI C90标准新增的关键字之一(const、enum、signed、void、volatile)

enum的作用是:

声明代表整数常量的符号名称。

1、枚举是什么意思

枚举有列举的意思,本意是一个一个列举出来,更准确一点应该是列出有穷序列集的所有成员

生活中的枚举例子很多,如一年的十二个月:January,February,……,November,December

一周7天:Monday,Tuesday,……,Sunday

简化的七彩彩虹颜色:红,橙,黄,绿,蓝,靛,紫

2、枚举类型(enumeration type)

枚举类型的一个作用是提高程序的可读性,从语法上看,如果你已经学过了C语言中的“结构(struct)”的概念

你会发现他们的语法格式是差不多的:

struct student{      /* 这是一个结构 */
	char[30] name;
	int age;
};

enum Taiji{          /* 这是一个枚举 */
	Ying,
	Yang
};

struct student stu;   /* 定义结构的变量 */
enum Taiji tj;        /* 定义枚举的变量 */

如何使用枚举类型的变量呢?

enum monthes{
	January,February,Match,April,May,June,July,August,September,October,November,December
};
enum monthes mon;

/* 某个函数 */
void fun()
{
	mon = February;    /* 可以在其取值范围内赋值 */
	if (mon == August) /* 可以在逻辑表达式中直白地这样写 */
	{
		// Operation_1
	}

        for(mon = February;mon <= September;mon++)  /* 可以写进循环条件判断 */
	{
		// Operation_2
	}
        /*
            注:该式中的mon++表达式,这样的格式在C中是支持的,但在C++中不允许,
            即C语言支持对枚举变量使用自增运算符,而C++不允许,如果程序存在两种语
            言的交叉,可以将mon声明为int类型,即可兼容C/C++
        */
}

3、枚举类型的本质和enum常量

技术上看,上述的January等枚举值并不是以字符形式存储,而是一个个int类型的整数常量,

如果我们把January按%d输出,可以看到打印出一个0。

这样的结构允许枚举常量用在switch结构中,因为它本质是int。

如果没有额外规定,枚举列表的常量会按照默认的数序指定,即从第一个枚举项开始分别为0,1,2……

当然在定义时我们也可以自己做出一点规定:

enum monthes{        /* 如果我们希望枚举的月份和表示它的值是一致的 */
	January = 1,
	February = 2,
	Match = 3,
	April = 4,
	……
};

enum humi{    /* 湿度默认等级 */
	dry = 10, normal = 45, wet = 80
};

如果存在某些枚举项没有自定义赋值呢?

enum humi{
	broken,                                  /* 首个枚举默认值为0 */
	veryDry = 9, Dry, littleDry,             /* 此时后两项没有指定,但系统会从9开始往后继续指定,即10,11…… */
	belowNormal = 44, Normal, aboveNormal,   /* 同理,此处三项为44,45,46 */
	littleWet = 79, Wet, veryWet             /* 每个自定义的指定值可以看做枚举指定的“新起点”,                
                                                    如果没有指定则自动按序指定 */
};

枚举配合case在switch结构中能很好地提高程序可读性:

enum weekdays{
	Mon, Tues, Wed, Thur, Fri, Sat, Sun
};
……
void fun()
{
	enum weekdays week;
	……
	switch (week)
	{
		case Mon:	printf("It's Monday");
		case Tues:	printf("It's Tuesday");
		case Wed:	printf("It's Wednesday");
		case Thur:	printf("It's Thursday");
		case Fri:	printf("It's Friday");
		case Sat:	printf("It's Saturday");
		case Sun:	printf("It's Sunday");
		default:	printf("What a bug...");
	}
	……
}

——参考《C Primer Plus第五版》

相关文章:

C语言关键字浅析-struct

猜你喜欢

转载自blog.csdn.net/Johan_Joe_King/article/details/83986719