枚举数据类型
typedef enum
{
NUM1=1,
NUM2,
NUM3,
NUM4,
NUM5,
}NUM;
void FunEnumPri(NUM num)
{
printf("num=%d\n", num);//300
}
void FunEnum()
{
printf("len=%ld,%ld\n", sizeof(NUM),sizeof(NUM1));//4 4
printf("NUM5=%d\n", NUM5);//5
NUM AA;
AA=100;
printf("AA=%d\n", AA);//100
FunEnumPri(300);
}
(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。
(2) NUM是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。
(3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。
(4) 可以人为设定枚举成员的值,从而自定义某个范围内的整数。
(5) 枚举型是预处理指令#define的替代。
(6) 类型定义以分号;结束。
与宏定义差异
1.枚举常量是实体中的一种,但宏不是实体;
2.枚举常量属于常量,但宏不是常量(字符常量);
3.枚举常量具有类型,但宏没有类型,枚举变量具有与普通变量相同的诸如作用域、值等性质,但宏没有,宏不是语言的一部分,它是一种预处理替换符。枚举类型主要用于限制性输入,例如,某个函数的某参数只接受某种类型中的有限个数值,除此之外的其它数值都不接受,这时候枚举能很好地解决这个问题。能用枚举尽量用枚举,否则在调试的时候你是看不到当时的值的。
4.枚举可以一次定义大量相关的常量,而宏只能定义一个。
5.枚举和宏的作用时间和存储形式不同。
6.枚举可以用gdb调试而宏不能。