C语言之enum的用法和注意事项(枚举类型)

一、一次定义多个常量。

比如说我们的程序中处理问题时与星期几有关,可能要将星期一转换为数字1,星期二转换为数字2,一直到数字7,在不用enum关键字的情况下,可以使用define来定义,但是大家会觉得很麻烦,因为你要一个一个的定义,星期的还好说,只有7天,如果是月份呢,一年有12个月份,那就要写12个define,非常的不方面,如果利用enum的话就会非常的方便。

#include<stdio.h>

enum week {Mon=1,Tue,Wed,Thu,Fri,Sat,Sun};

int main()
{
    printf("%d",Tue);
    return 0;
}

这样定义以后,Mon的值为1,Tue的值为2,Wed的值为3,一次类推。 
然后就可以像使用define之后的常量一样的使用定义的7个值了。

如果开头不写Mon=1的话,Mon的默认值为0,然后从0开始增长。例如:

enum color {red,blue,green,yellow};

如果这样定义的话,red的值为0,blue的值为1,然后一次增长。

如果从中间开始赋值的话:

enum color {red,blue,green=5,yellow};

那么red到blue是按照默认的从0开始增长的,green就是定义的值5,然后green之后的值都是从5开始增长的

当然你也可以为每个枚举的变量都赋值,这样就和全都用define定义是一样的了,如果枚举中有某个值没有被赋值,那么它将是从前一个赋值的变 
量开始,一次增加1.

二、限定变量的范围

比如我们的应用程序中要处理有关月份的东西,显然月份只能取1-12中的某个数字,为了保证程序的正确性和健壮性,我们应该使用enum。

#include<stdio.h>

enum Month {Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,dec};

int main()
{
    enum Month a =  Feb;
    printf("%d",a);
    return 0;
}

比如像这样,定义的枚举类型 a 的取值只能是那12个变量中的一个,如果赋予了其他的变量,编译器就会报错。


使用enum可以有以下几种方法:

1、在定义enum的同时,声明变量:

enum Month {Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,dec} a,b;

这样就声明了两个枚举类型a和b

2、定义完enum之后再声明变量:

enum Month {Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,dec};
enum Month a =  Feb;

3、定义匿名的枚举变量

enum  {Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,dec} a;

这样的话,只能使用a这一个枚举类型的变量,不能再定义其他的枚举类型。

4、typedef  enum则是用来定义一个数据类型,那么该类型的变量值只能在enum定义的范围内取

typedef enum  {Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,dec} Day;
Day a, b;

注意与宏定义区别:

enum用来定义一系列宏定义常量区别用,相当于一系列的#define xx xx,当然它后面的标识符也可当作一个类型标识符;typedef  enum则是用来定义一个数据类型,那么该类型的变量值只能在enum定义的范围内取。两者在这点上是没有差别的。

注意:同一个程序中不能定义同名的枚举类型,不同的枚举类型中也不能存在同名的命名常量


转载:http://blog.csdn.net/xingjiarong/article/details/47275971

参考:https://blog.csdn.net/wo_yan_zhao1220/article/details/12906197


  • 26
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值