c语⾔如何⽤宏定义来初始化⼀个数组_C语⾔学习篇(26)
——枚举enum
引⾔
在⽇常编写代码或开源项⽬中,枚举(enum)数据类型到处可见,那么为什么要引⼊枚举这样的数据类型呢?枚举类型能带来哪些编程时的
便利呢?⾸先枚举和宏定义有⼀定相似性,那么两者有什么区别呢?什么时候⽤枚举,什么时候⽤宏定义呢?今天我们就来聊聊枚举数据类
型。
概念和⼀些特性
枚举(enum)在C语⾔中是⼀些符号常量集。通俗来说:枚举定义了⼀些符号,这些符号的本质就是int类型的常量,每个符号和⼀个常量绑
定。枚举中的符号就表⽰⼀个⾃定义的⼀个识别码,编译器对枚举的认知就是符号常量所绑定的那个int类型的数字。
#include //枚举类型定义enum weekdays{Monday = 1,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday,};int main(void){//定义枚举变量dayenum weekdays
简单分析下,⾸先我们定义了⼀个weekdays枚举类型,元素符号是从星期⼀(赋值为1)到星期天,然后定义了枚举变量day,并初始化为Monday,之后打印其值。
我们编译运⾏下:
可以看到day赋值为”Monday“,其值为1,与我们预想的⼀致。 相信这⾥有⼩伙伴就会提出如果在定义枚举类型时,没有初始化(即
Monday=1),那么day的值是多少呢?那么我们来测试下,将以上的枚举改为如下:
//枚举类型定义enum weekdays{Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday,};
然后,再次编译运⾏:
可以看到结果为0,因此这⾥可以引出⼀个结论:枚举类型在定义时,如果第⼀个元素符号没有指定值,那么默认其值为0。
OK,接下来我们定义多个枚举类型,并依次赋值为枚举中的元素符号,并打印它们的值,具体如下:
#include //枚举类型定义enum weekdays{Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};int main(void){//定义枚举变量dayenum weekdays day1编译运⾏:
从结果来看,我们可以得出另外⼀个结论:枚举类型中的元素符号在没有特别指定其值时,其值是⾃增长的(+1)。
接下来,我们再改造下枚举定义,我们对其⼀些元素符号指定值,具体如下:
//枚举类型定义enum weekdays{Monday,Tuesday,Wednesday,Thursday=4,//指定“Thursday”值为4Frid
ay,Saturday=9, SaturdaySunday};
编译运⾏:
从结果中我们⼜可以总结出⼀个规律:我们可以指定枚举中任⼀元素符号的值,并且下⼀个符号的值是根据上的符号的值进⾏增长的。
枚举的作⽤
枚举本质是对⼀些数字,如0,1, 进⾏符号编码,这样的好处就是编程时可以不⽤看数字⽽直接看符号,就能明⽩其实际含义,⼀⽬了然,否则我们很难或是很费劲看其他⼈写的代码(如代码中正确返回0,错误返回-1,⽽ ⽤枚举TRUE, FLASE,就能⾮常清楚知道含义,使代码清晰化,这也是⾮常重要的编程技巧和习惯)。
另⼀⽅⾯,之前我们讲过的宏定义也是能将⼀些数字,转为⽤符号表⽰,但是宏定义并没有我们上述讲的枚举特性,每⼀个宏定义的符号或是表达式都是独⽴的,⽽我们枚举中的元素虽然是独⽴了,但是每个元素符号的值是有关联的(⽐如⾃增长)。
枚举的使⽤情景
当我们要定义的常量是⼀个有限集合时,如⼀个星期,星期⼀到星期⽇,⼀个⽉31天,⼀年12个⽉....等等,当然使⽤宏定义也⾏,但是使⽤枚举更适合。
⽽当⼀些常量符号之间⽆关联,或者是⽆限的情况下,更适合⽤宏定义。
总结
在C语⾔中是可以没有枚举类型的,我们完全可以⽤宏定义或者直接使⽤数字表⽰, 但是这样的编程习惯并不推荐,枚举的⼏点特性还是⾮常好⽤的,让我们的代码看起来⾮常⼯整,清晰:
枚举类型在定义时,如果第⼀个元素符号没有指定值,那么默认其值为0
枚举类型中的元素符号在没有特别指定其值时,其值是⾃增长的(+1)
数组全部赋值为1我们可以指定枚举中任⼀元素符号的值,并且下⼀个符号的值是根据上的符号的值进⾏增长的
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论