一、前言
首先,提一下宏定义#define
,其一般形式为:
#define 宏名 字符串
这个知识点很重要,到处能用得到。其可以与typedef来进行类比进行理解(可查看【C语言笔记】define与typedef的区别?)。除此之外,其还可以与枚举enum
进行类比。
二、什么是枚举
从字面理解,就是一一列举的意思。很多时候,有一些数据的取值有限的,这时候可以把这些可能的结果列出来,并赋予新的名字,这样有助于提高代码的可读性。例如,一个星期有7天,一年有12个月,期末考试科目有6个科目等情况,完全可以一一列举出来。
当我们要为整数定义一些别名(例如定义为星期数)的时候,可以使用宏定义,如:
#define MON 1
#define TUE 2
#define WED 3
#define THU 4
#define FRI 5
#define SAT 6
#define SUN 7
此时,我们可以使用枚举来达到同样的效果,如:
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
};
其中,enum
是关键字,是必须的。DAY
是枚举名,可有可无,这个名字是自己定义的;MON=1, TUE, WED, THU, FRI, SAT, SUN
是枚举成员。
枚举成员的值是根据前一个成员的值递增1,即上面枚举定义等价于:
enum DAY
{
MON=1, TUE=2, WED=3, THU=4, FRI=5, SAT=6, SUN=7
};
若上述定义中第一个成员MON
不赋值的话,那么其默认为0
。
若其他成员赋了初值,也是遵循“枚举成员的值是根据前一个成员的值递增1”这一规则,如:
enum DAY
{
A,B,C=100,D,F=200,G
};
此处
A=0
B=1
C=100
D=101
F=200
G=201
三、枚举类型变量的定义方法
方法一
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
};
enum DAY good_day, bad_day;
此处,DAY
是枚举名,相当于一个模板,可以使用这个模板去定义变量good_day
,bad_day
,定义的时候不要忘了enum
。
方法二
enum
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
}good_day, bad_day;
相对于方法一,此处省略了枚举名。虽然更简洁了,但是因为没有了名字,后面就不能用该枚举定义新的变量。
方法三
typedef enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
}DAY;
DAY good_day, bad_day;
此处使用typedef
为枚举定义一个别名,这个别名为DAY
,关于typedef
的介绍可点击文首的链接进行查看。
程序实例
编译环境为 : gcc 6.3.0
#include <stdio.h>
typedef enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
}DAY;
int main(void)
{
DAY good_day;
printf("你觉得一周中哪一天最美好?\n");
scanf("%d", &good_day);
printf("我比较喜欢");
switch(good_day)
{
case MON: printf("星期一"); break;
case TUE: printf("星期二"); break;
case WED: printf("星期三"); break;
case THU: printf("星期四"); break;
case FRI: printf("星期五"); break;
case SAT: printf("星期六"); break;
case SUN: printf("星期日"); break;
default: printf("Error!"); break;
}
return 0;
}
程序运行结果:
四、枚举变量占用的字节数?
实测程序:
#include <stdio.h>
typedef enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
}DAY;
int main(void)
{
DAY good_day;
printf("sizeof(DAY) = %d\n",sizeof(DAY));
printf("sizeof(good_day) = %d\n",sizeof(good_day));
printf("sizeof(int) = %d\n",sizeof(int));
return 0;
}
运行结果:
从该程序运行结果也可看出,枚举类型变量需要存放的是一个整数,它的长度和int的长度相同。
以上就是关于枚举类型enum的一些笔记,欢迎转发!
最后,分享两篇关于枚举的文章,都讲得很详细。
https://www.cnblogs.com/JCSU/articles/1299051.html
http://c.biancheng.net/cpp/html/99.html