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

C语言之enum的用法和注意事项(枚举类型)在 C 语言中有一个关键字是 enum 枚举类型 不知道大家平时用吗 但是 enum 关键字在有些时候是非常方面的 下面说一下使用 enum 关键字的几种情况 定义枚举类型定义用关键字 enum 标识 形式为 enum 标识符 枚举数据表 注意 1 enum 是关键字 标识枚举类型 定义枚举类型必须用 enum 开头 2 枚举数据表中的名字是程序员自己设定 这些名字只是一个符号 但注意命名时要提高程序的可读性 枚举型是一个集合 集合中的元素 枚举成员 是一些命名的整型常量 元素之间用逗号 隔

在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 
     enum week { 
   Mon=1,Tue,Wed,Thu,Fri,Sat,Sun}; int main() { 
    printf("%d",Tue); return 0; } 

如果开头不写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开始增长的。

二、限定变量的范围

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220892.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午7:25
下一篇 2026年3月17日 下午7:25


相关推荐

  • 整理:FPGA选型[通俗易懂]

    整理:FPGA选型[通俗易懂]针对性整理下FPGA选型问题一、获取芯片资料:要做芯片的选型,首先就是要对有可能要面对的芯片有整体的了解,也就是说要尽可能多的先获取芯片的资料。现在FPGA主要有4个生产厂家,ALTERA,XIL

    2022年7月3日
    30
  • hibernate教程_Hibernate教程

    hibernate教程_Hibernate教程hibernate 教程 RecentlyIhav Hibernateiso Sothispostis

    2026年3月18日
    1
  • 汇编 LEA指令

    汇编 LEA指令LEA 指令返回间接操作数的偏移地址 由于间接操作数可能使用一个或多个寄存器 因此其偏移值是在运行时计算的

    2026年3月19日
    2
  • JavaScript 基本知识

    JavaScript 基本知识bilibiliJS视频链接:https://www.bilibili.com/video/BV1W54y1J7Ed?p=2&spm_id_from=pageDrivervscode配置html:https://blog.csdn.net/caohongxing/article/details/108632859目录JS来源JavaScript核心由三部分组成书写位置:行内式,内嵌式,外链式变量:var准备一个容器,变量名有规格且区分大小写JS中的数据:基本数据类型和引用数据类型.

    2022年10月20日
    4
  • next()和nextLine()的区别详解

    next()和nextLine()的区别详解//next()和nextLine()的区别详解/*next()方法在读取内容时,会过滤掉有效字符前面的无效字符,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其过滤掉;只有在读取到有效字符之后,next()方法才将其后的空格键、Tab键或Enter键等视为结束符;所以next()方法不能得到带空格的字符串。 *//*nextLine()方法字

    2022年5月29日
    36
  • 米聊显示服务器开小差请稍候再试,系统开小差请稍后再试什么意思啊

    米聊显示服务器开小差请稍候再试,系统开小差请稍后再试什么意思啊大家好 我是时间财富网智能客服时间君 上述问题将由我为大家进行解答 以手机为例 系统开小差请稍后再试是服务器有问题 或者就是网络有问题 智能手机 又称作智慧型手机 智能型电话 英语 Smartphone 是对于那些运算能力及功能比传统功能手机更强的手机的集合性称谓 智能手机使用最多的操作系统有 Symbian 已退市 WindowsPhone Android IOS 和 BlackBerryOS

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号