### 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

C语言关键字浅析-enum相关推荐

  1. C语言关键字浅析-const

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### const关键字是ISO/ANSI C90标准新添加的关键字之一 同期的"新生"还有enum.s ...

  2. C语言关键字浅析-return

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### return关键字是C程序中最常见的关键字之一 对于一个最简单的demo程序,或者说你最早接触的HELLO WORL ...

  3. C语言关键字浅析-double

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### double关键字声明一种称之为"双精度"的浮点数据类型 其"双"之处在于与 ...

  4. C语言关键字浅析-float

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### float从单词的字面上看是"浮动"的意思 在C语言中,float表示一种基本数据类型,浮点型, ...

  5. C语言关键字浅析-do

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### do关键字在C语言中不能单独使用 它需要和while关键字配套使用表示一种退出条件循环结构 其区分于while循环和 ...

  6. C语言关键字浅析-while

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### while在英文中常被翻译为"在--的时候,当--时",私以为在C语言的while里,应当为&q ...

  7. C语言关键字浅析-_Imaginary

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### _Imaginary是C99新增的关键字,表示一种基本数据类型--虚数 与_Complex一样,该类型的出现主要是为 ...

  8. C语言关键字浅析-short

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### short,本意是"短,矮"的意思,在C语言中声明一种短整数类型,与long相对应 short与 ...

  9. C语言关键字浅析-switch

    ### C语言关键字浅析系列 ### ### ISO/ANSI C 关键字 ### switch在英文中是"开关"的意思,比如switch on和switch off可以表示电灯的 ...

最新文章

  1. sqlserver创建对于job失败_创建维护计划失败创建 对于 JobStep“子计划”失败
  2. ListView使用技巧
  3. mysql grou平by_MySQL group by对单字分组序和多字段分组的方法讲解
  4. 你该知道什么值得买 该有多活跃(核心数据)
  5. CodeForces - 1303D Fill The Bag(贪心+模拟)
  6. python登录页面_Python:简单的登陆GUI界面
  7. 管道(Pipe)/createPipe
  8. mysql和mongodb存储时间_MongoDB存储时间
  9. 计算机基础ppt_为什么大学老师教编程上课都不敲代码?为何老师上课都是PPT讲解,实战呢?...
  10. 将python算法转为scala_将Python转换为scalaasp
  11. 李彦宏:AI 企业要保护隐私;罗永浩回应酷派“欠钱不还”;ofo 郑州公司人去楼空 | 极客头条...
  12. 【STL】List基础
  13. 首次打开文件简单分析
  14. 为了拿Ph.D而做出的诺贝尔奖
  15. xshell5 Xshell6 商业版的破解版
  16. untiy3d坐标系以及向量运算
  17. ts 手动实现 ts 中的map
  18. Cantor表 [cantor]
  19. Android仿微信图片编辑库,你想要的功能这里都有
  20. iOS开发笔记(IOS7回归)

热门文章

  1. 网上订餐叫外卖的发展优势
  2. 浏览器指纹:原来我们一直被互联网巨头监视,隐私在网上裸奔、无处可藏
  3. AI时代下,如何打造一个具有情感化属性的智能相册?
  4. kerastensorflow+分布式训练︱实现简易视频内容问答框架
  5. 解答千古难题:路由器到底用不用定期关闭?
  6. c语言的内部名和外部名,C语言 external
  7. Android电池信息
  8. 原生app开发的优缺点
  9. CAD常见问题之创建一个新的键盘快捷方式
  10. 选购笔记本要看清液晶屏幕及主流技术