学习背景:之前自己做的小项目一直没怎么使用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知识点更好的应用,十分欢迎在留言区留言或资源链接,谢谢。