• C语言学习之枚举类型


    前言

    枚举(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))
    

    参考资料:

    Jlink使用技巧系列文章:


    欢迎大家关注我的个人博客

    或微信扫码关注我的公众号

  • 相关阅读:
    转载:MyBatis获取插入记录的自增长字段值
    006---抽象类
    005---组合
    004---继承与派生
    003---属性查找和绑定方法
    002---类与对象
    001---面向对象和面向过程的区别
    017---Django的中间件解决跨域
    10---git安装
    007---归并排序
  • 原文地址:https://www.cnblogs.com/whik/p/10407174.html
Copyright © 2020-2023  润新知