什么时分需求用到enum呢?当变量的数值在几个规模之间,如一个week变量取值只要Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday。这样用enum比较好。当然也能够用define.可是define保护起来比较费事, 合适变量的数值规模值较少的时分。
1、用enum关键字阐明常量(即阐明枚举常量)有以下几点优点:
(1) 使程序更简单保护和直观。例如,下面界说的枚举是描绘UART支撑的传输bit位数,从枚举类型的界说就能够知道UART模块供给的传输bit的几种方式。
enum{usartDatabits4=USART_FRAME_DATABITS_FOUR,/*4databits(notavailableforUART).*/usartDatabits5=USART_FRAME_DATABITS_FIVE,/**《5databits(notavailableforUART).*/usartDatabits6=USART_FRAME_DATABITS_SIX,/**《6databits(notavailableforUART).*/usartDatabits7=USART_FRAME_DATABITS_SEVEN,/**《7databits(notavailableforUART).*/usartDatabits8=USART_FRAME_DATABITS_EIGHT,/**《8databits.*/usartDatabits9=USART_FRAME_DATABITS_NINE,/**《9databits.*/usartDatabits10=USART_FRAME_DATABITS_TEN,/**《10databits(notavailableforUART).*/}USART_Databits_Enum;
(2)使程序更安全
比方,在写底层驱动是,向上层供给一个UART初始化函数UarTInit(uint32 baudrate , uint32 bit)在调用该函数时,或许由于程序员不了解模块UART支撑的传输bit方式而供给了过错的bit参数。防止此类现象,咱们当然也能够在UarTInit()函数中对bit规模进行检查。假如参数取值是接连的还好,假如不接连运用多个if-else或switch。将消耗必定的ROM和CPU时刻。
咱们能够将函数界说为UarTInit(uint32 baudrate , USART_Databits_Enum bit)。一来咱们能够经过检查USART_Databits_Enum枚举类型很简单知道UART支撑的传输bit方式。另一方面在编译的时分就能够防止传递过错的参数。
2、枚举与宏界说的差异和联络:
宏和枚举之间的不同主要在效果的时期和存储的方式不同,宏是在预处理的阶段进行替换作业的,它替换代码段的文本,程序运转的过程中宏已不存在了。而枚举是在程序运转之后才起效果的,枚举常量存储在数据段的静态存储区里。(在IAR编译环境中,枚举类型默以为字符型,在M3内核下编程,为了削减不必要的字符扩展指令,能够用?enum_is_int指令来强制使一切的枚举类型为4bytes。)
但也不能就此说宏比枚举好,假如需求界说十分多的常量,用一条enum {…。.}显着比一大堆define更明晰,枚举也能够用来界说一些特别类型,比方Bool,如: type enum {FALSE,TRUE} Bool;