C语言学习之枚举类型 |
您所在的位置:网站首页 › 枚举类型c语言 › C语言学习之枚举类型 |
文章目录
前言枚举类型的定义枚举变量的说明内存的分配注意1.不能定义同名的枚举的类型,如:2.不能包含同名的枚举成员3.对枚举型的变量赋整数值时,需要进行类型转换。
单片机开发过程中常用的几个枚举类型
前言
枚举(enum)类型是计算机编程语言中的一种数据类型。枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。 枚举类型的定义枚举类型定义的一般形式为: enum 枚举名 { 枚举值表 };在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。 例如: enum weekday { Mon, Tues, Wed, Thurs, Fri, Sat, Sun };该枚举名为weekday,枚举值共有7个,即一周中的七天。凡被说明为weekday类型变量的取值只能是七天中的某一天。 像上面那样,当不写对应的值,枚举值默认从0开始,即等同于: enum weekday { Mon = 0, Tues = 1, Wed = 2, Thurs = 3, Fri = 4, Sat = 5, Sun = 6 };当然,也可以像这样简写: enum weekday { Mon = 0, Tues, Wed, Thurs, Fri, Sat, Sun };这样枚举值就会从0开始递增,和上面的写法是一样的。 枚举变量的说明如同结构体(struct)和共用体(union)一样,枚举变量也可用不同的方式说明,即先定义后说明,同时定义说明或直接说明。设有变量a,b,c被说明为上述的weekday,可采用下述任一种方式: enum weekday{sun,mon,tue,wed,thu,fri,sat}; //定义枚举类型 enum weekday a,b,c; //定义3个枚举类型的变量 enum weekday{sun,mon,tue,wed,thu,fri,sat}a,b,c; //定义枚举类型的同时,定义3个变量 enum{sun,mon,tue,wed,thu,fri,sat}a,b,c; //枚举名可省略,但后面不能再定义新的枚举变量用typedef把枚举类型定义一个别名 typedef enum weekday //此处的weekday为枚举名 { Mon = 0, Tues, Wed, Thurs, Fri, Sat, Sun }weekday; //此处的weekday为enum weekday的别名 weekday today, tomorrow; //枚举类型的变量,即enum weekday类型当然枚举名也可以省略: typedef enum //省略枚举名 { Mon = 0, Tues, Wed, Thurs, Fri, Sat, Sun }weekday; //此处的weekday为枚举类型的别名 weekday today, tomorrow; //枚举类型的变量,即enum weekday类型但是不可以省略类型别名: typedef enum weekday { Mon = 0, Tues, Wed, Thurs, Fri, Sat, Sun }; weekday today, tomorrow; //Code::Blocks环境报错 内存的分配enum是枚举型,所占内存空间恒等于4字;union是共用体,成员共用一个变量缓冲区。 注意 1.不能定义同名的枚举的类型,如: typedef enum { wednesday, thursday, friday } workday; //定义了一个枚举类型,别名为workday typedef enum WEEK { saturday, sunday = 0, monday, } workday; //定义了一个枚举类型,别名为workday,重复了 2.不能包含同名的枚举成员 typedef enum { wednesday, //成员重复 thursday, friday } workday_1; typedef enum WEEK { wednesday, sunday = 0, monday, } workday_2; 3.对枚举型的变量赋整数值时,需要进行类型转换。在Code::Blocks环境测试并不需要进行强制转换,无警告,无错误 单片机开发过程中常用的几个枚举类型 typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus; typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState; typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus; #define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))参考资料: C语言详解-枚举类型Jlink使用技巧系列文章: Jlink使用技巧之合并烧写文件Jlink使用技巧之烧写SPI Flash存储Jlink使用技巧之虚拟串口功能Jlink使用技巧之读取STM32内部的程序Jlink使用技巧之J-Scope虚拟示波器功能Jlink使用技巧之单独下载HEX文件到单片机欢迎大家关注我的个人博客 或微信扫码关注我的公众号 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |