定义:是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内.
在C语言等计算机编程语言中是一种构造数据类型。
它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。
枚举变量:指用枚举类型定义的变量.变量和参数都可以定义为枚举类型.过程的返回值也可以是枚举类型.
枚举成员:枚举成员是该枚举类型的命名常数。任意两个枚举成员不能具有相同的名称。
每个枚举成员均具有相关联的常数值。此值的类型就是枚举的基础类型。每个枚举成员的常数值必须在该枚举的基础类型的范围之内。
他们是不能进行普通的算术赋值的,(pencil=1;)这样的写发是错误的,但是你可以在声明的时候进行赋值操作!
例如:
enum Port
{
PTA0,PTA1,PTA2,PTA3,PTA4,PTA5,
PTA6=1,PTA7,PTA8,PTA9,PTA10,
PTA11, PTA12, PTA13, PTA14, PTA15,
PTA16, PTA17, PTA18, PTA19, PTA20,
} PTXn_e;
复制代码
在枚举类型中声明的第一个枚举成员它的默值为零。以后的枚举成员值是将前一个枚举成员(按照文本顺序)的值加 1 得到的。
所以,PTA0=0,PTA1=1,PTA2=2,PTA3=3,PTA4=4,PTA5=5,
PTA6=1(赋值),PTA7=2,PTA8=3,PTA4=4……
<ignore_js_op>
基础类型必须能够表示该枚举中定义的所有枚举数值。
枚举声明可以显式地声明 byte、sbyte、short、ushort、int、uint、long 或 ulong 类型作为对应的基础类型。
没有显式地声明基础类型的枚举声明意味着所对应的基础类型是 int。
枚举是一种数据类型,所以他和基本数据类型一样也可以对变量进行声明。
方法一:枚举类型的定义和变量的声明分开
enum Port
{
PTA0,PTA1,PTA2,PTA3,PTA4,PTA5,
PTA6,PTA7,PTA8,PTA9,PTA10,
PTA11, PTA12, PTA13, PTA14, PTA15,
PTA16, PTA17, PTA18, PTA19, PTA20, /*枚举成员*/
};
enum Port LED1;//枚举类型为enum Port 的变量LED1
enum Port LED2;//LED2的变量类型为enum Port
LED1=PAT0;//变量LED1的值为0
LED2=PAT6;//变量LED2的值为6
复制代码
方法二:类型定义与变量声明同时进行:
enum Port
{
PTA0,PTA1,PTA2,PTA3,PTA4,PTA5,
PTA6,PTA7,PTA8,PTA9,PTA10,
PTA11, PTA12, PTA13, PTA14, PTA15,
PTA16, PTA17, PTA18, PTA19, PTA20, /*枚举成员*/
}LED1,LED2;//变量LED1,LED2的类型为枚举型enum Port
LED1=PTA0;
LED2=PTA6;
复制代码
方法三:用typedef关键字将枚举类型定义成别名,并利用该别名进行变量声明:
typedef enum Port
{
PTA0,PTA1,PTA2,PTA3,PTA4,PTA5,
PTA6,PTA7,PTA8,PTA9,PTA10,
PTA11, PTA12, PTA13, PTA14, PTA15,
PTA16, PTA17, PTA18, PTA19, PTA20,
} PTXn_e;
enum Port LED1;
LED1=PTA0;
PTXn_e LED2;
LED2=PTA1;
复制代码
个人理解:因为关键字 typedef 的存在,使得 enum Port 等价于 PTXn_e
typedef 的作用,我理解的是 相当于别人给自己起的小名(或者外号)。
此处 PTXn_e 等价于 enum Port,用法类似于宏定义。
注意:宏定义在预编译阶段, typedef 在编译时被解释。对于 enum 在 预编译阶段也是被跳过的!!!
但是它本身是一种存储类的关键字,所以与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。