zoukankan      html  css  js  c++  java
  • 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使用技巧系列文章:


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

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

  • 相关阅读:
    算法竞赛入门经典习题2-3 韩信点兵
    ios入门之c语言篇——基本函数——5——素数判断
    ios入门之c语言篇——基本函数——4——数值交换函数
    144. Binary Tree Preorder Traversal
    143. Reorder List
    142. Linked List Cycle II
    139. Word Break
    138. Copy List with Random Pointer
    137. Single Number II
    135. Candy
  • 原文地址:https://www.cnblogs.com/whik/p/10407174.html
Copyright © 2011-2022 走看看