枚举类型enum的用法

学习背景:之前自己做的小项目一直没怎么使用enum,但接触到大项目后发现,哪里都是结构体和枚举,一层又一层的,刚开始看得很头疼,找一个变量都要翻好多层。后面才发现,其实是自己对概念理解不透彻,对概念能应用的场合及与其他知识点组合应用不了解所导致的。

总结反思:所以学习一个新知识点,第一个要明白概念,第二要知道怎么使用,第三要知道应用在什么地方,第四要知道能和什么知识点结合使用,第五,知道该知识点的优缺点、性能等等。

【1】枚举概念

   1、用来声明代表整数常量的符号名称,关键字:enum;

   2、枚举常量是int类型,多个常量间用逗号“,”分隔开;

   3、枚举类型的作用是为了提高程序可读性。(大项目中就是将一类相关的常量,用enum封装起来);

   4、枚举变量默认从0开始,依次递增1。也可以自己赋值,赋值变量的下一个若没有赋值,则在上一个的基础上递增1;

   5、程序中可直接使用枚举常量,就像访问宏定义一样,不过要注意作用域;

【2】枚举的使用

1 enum gamemancolor 
2 {
3   red,            // 0,默认从0开始
4   green,          // 1
5   blue  =  3,     // 3,自己赋值
6   white,          // 4
7   black,          // 5
8 };   // 注意结尾有分号          

  enum gamemancolor color; //定义一个gamemancolor 枚举常量的color

【3】与typedef结合使用

   跟结构体struct 一样,和typedef结合重命名,大项目里一般是这么使用的。

typedef enum
{
    MT7688_GPIO_MODE                     = (0x64)  ,
    MT7688_GPIO_DIRECTION                = (0x604) ,
    MT7688_GPIO_VALUE                    = (0x624) 
} teMT7688Mode;

typedef enum
{
    E_ZCL_AM_BOUND,
    E_ZCL_AM_GROUP,
    E_ZCL_AM_SHORT,
    E_ZCL_AM_IEEE,
    E_ZCL_AM_BROADCAST,
    E_ZCL_AM_NO_TRANSMIT,
    E_ZCL_AM_BOUND_NO_ACK,
    E_ZCL_AM_SHORT_NO_ACK,
    E_ZCL_AM_IEEE_NO_ACK,
    E_ZCL_AM_BOUND_NON_BLOCKING,
    E_ZCL_AM_BOUND_NON_BLOCKING_NO_ACK,
    E_ZCL_AM_ENUM_END /* enum End */
} teZCL_AddressMode;

【4】使用枚举enum

   好,是时候看看枚举的应用啦。我们要理解,枚举常量,里面定义的可直接该作用域内使用。

   下面代码用了上面定义的枚举类型,作为一个函数变量,那么我们在调用这个函数时,就可以直接这么使用:

   function(520, E_ZCL_AM_BOUND);

 1 int function(int value, teZCL_AddressMode addrMode)
 2 {
 3     // 一些代码
 4    switch(addrMode)
 5   {
 6       case E_ZCL_AM_BOUND:  handler1(); break;
 7       case E_ZCL_AM_GROUP:  handler2(); break;
 8       .
 9       .
10       .
11       .
12       default: hanlerother(); break;
13   }     
14   return cvalue;  
15 }

【5】对后期编码要求

   学习完枚举后,将来对一类相同的常量等等,就可以用enum封装起来了,然后放头文件里。

【6】帖子未完,学习到有关枚举更好的用法会陆续更新,如果你也有对enum知识点更好的应用,十分欢迎在留言区留言或资源链接,谢谢。

 

猜你喜欢

转载自www.cnblogs.com/Mr-Tortoise/p/9113178.html