在C语言中有一个关键字是enum,枚举类型,不知道大家平时用吗,但是enum关键字在有些时候是非常方面的。下面说一下使用enum关键字的几种情况。

定义

枚举类型定义用关键字enum标识,形式为:

enum 标识符
{枚举数据表
};

注意:

(1)enum是关键字,标识枚举类型。定义枚举类型必须用enum开头。

(2)枚举数据表中的名字是程序员自己设定,这些名字只是一个符号。但注意命名时要提高程序的可读性。枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。

(3)枚举数据表的值都是整数。第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。也可以人为设定枚举成员的值,从而自定义某个范围内的整数。

(4)可以在定义类型时对枚举常量初始化。

(5)枚举类型可以进行比较。

(6)枚举常量不是字符串,不能用%s方式输出字符串。

(7)枚举型是预处理指令#define的替代

比如:

enum status
{copy,delete};

枚举类型status仅有两个数据,一个是copy,一个是delete,序号为0、1,代表复制与删除。

enum status
{copy=6,delete};

则copy的序号为6,delete的序号为7。

用法

一、一次定义多个常量。

比如说我们的程序中处理问题时与星期几有关,可能要将星期一转换为数字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

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

  1. java枚举类型enum用法_深入理解java枚举类型enum用法

    enum 的全称为 enumeraTIon, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中. 下面是我在使用 enum 过程中的一些经验和总结. 原始的接口定义常量 publi ...

  2. enum枚举类型用法

    文章目录 1. 枚举类型和枚举变量 1.1 枚举类型的定义和声明 1.2 枚举变量的定义和声明 2. 枚举变量和枚举常量的关联对应 3. 枚举类型和变量的应用 3.1 作为判断语句中的逻辑 3.2 一 ...

  3. C语言枚举类型(Enum)

    C语言枚举类型(Enum) 在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六 ...

  4. C语言的枚举类型(Enum)

    参考:C语言的枚举类型(Enum) 地址:https://blog.csdn.net/aliyonghang/article/details/123615803?spm=1001.2014.3001. ...

  5. C 语言之枚举类型Enum

    枚举类型的定义形式为: enum typeName{ valueName1, valueName2, valueName3, ...... }; enum是一个新的关键字,专门用来定义枚举类型,这也是 ...

  6. c语言枚举类型enum用法参数,C语言枚举类型(Enum)

    在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等. 以每周七天为例, ...

  7. c枚举类型enum例题_SystemVerilog数据类型

    两态数据类型​mp.weixin.qq.com 自定义.枚举.结构体类型​mp.weixin.qq.com 1.两态数据类型 Verilog有两种基本数据类型:变量(reg)和网线(wire),这是四 ...

  8. 0编译器详解_详解Java枚举类型(Enum)中的方法

    文章前记 程序员工作久了便可能整日忙碌于"增删改查"中,迷失方向,毫无进步. 该公众号致力于分享软件开发相关的原创干货,助你完成从程序员到架构师的进阶之路! 努力!做一个NB的Co ...

  9. C语言枚举变量定义,请问C语言枚举类型是什么意思

    枚举类型 C语言或C++的一种构造类型,它用于声明一组命名的常数. (1)枚举的声明:枚举声明用于声明新的枚举类型. 访问修辞符 enum 枚举名:基础类型 { 枚举成员 } ; 基础类型必须能够表示 ...

最新文章

  1. flutter dio+rxdart
  2. 数字溢出为啥程序出错
  3. oracle查对象创建时间,oracle:查询某个时间之后,指定用户,指定对象类型,并创建的表的个数...
  4. Magento Url重写修改
  5. 康普顿效应是弹性碰撞吗_【量子力学】康普顿散射与逆康普顿散射
  6. Java的Exception解析
  7. cuda out of memory gpu还有空间_《室内设计》光与空间的无缝衔接
  8. Html+Css打造一个精美的注册页面
  9. LRUCache和FastLRUCache实现分析
  10. 计算学生成绩 c语言,c语言项目实战2学生成绩的输入与计算.ppt
  11. 浏览器打不开CSDN博客网站解决方法
  12. 更新一些CAD中比较容易混淆的概念
  13. 数据库系统的体系结构
  14. 【FPGA的基础快速入门22-------OV7725摄像头模块】
  15. 不同超声诊断仪器的原理和FPGA在超声中应用
  16. matlab 黄金分析,优化算法之黄金分割算法-Matlab-站长-站长头条
  17. XP和Linux双系统启动菜单的修复
  18. Unity3D手机斗地主游戏开发实战(01)_发牌功能实现
  19. 【网络安全】还在担心网络诈骗?让OneDNS替你揽下一切
  20. EM算法原理和python简单实现

热门文章

  1. Windows10 初体验
  2. 微信塔防小游戏开发教程,唤境引擎制作塔防游戏分享
  3. Apache RewriteRule 重写URL拦截静态资源
  4. 【观察】小米上市后首次发布财报 同比增长75.4%背后的秘密
  5. Excel 数值格式四舍五入出现不统一问题。
  6. 机器学习之路--Matplotlib
  7. Ubuntu 输入法不显示(无法选择)解决
  8. 格林诺奇指环王拍摄地_《指环王》,《 Linux上的无主之地2》等的许可
  9. 【中间件技术】第二部分 CORBA规范与中间件(1) CORBA基本原理
  10. 独家专访丨《魔法俪人帮》节目组接受媒体记者访谈 专访魔法俪人帮:弘扬美业精神,传递美丽价值!