C语言之enum的用法和注意事项(枚举类型) |
您所在的位置:网站首页 › static变量赋值后可以修改吗 › C语言之enum的用法和注意事项(枚举类型) |
在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,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 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 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |