1 枚举
- 枚举:受限制的有符号整型
- 枚举内元素的取值必须是有符号的整型值
- 枚举变量的取值必须是枚举值的集合
1.1 枚举元素的值
- 未初始化的枚举元素的取值默认从0开始,往后依次递增1
- 部分未初始化的枚举元素的取值,从前一个已初始化的枚举元素的值开始,往后递增1
- 枚举元素的取值允许重复,枚举元素不能重复
#include<stdio.h>
enum Week{Mon, Tue, Wen=5, Thu, Fri, Sat=5, Sun};
int main()
{
enum Week day = Mon;
enum Week day1 = Tue;
enum Week day2 = Thu;
printf("%d %d %d\n", day, day1, day2);
return 0;
}
1.2枚举实现bool
#include<stdio.h>
typedef enum _Bool{ True = 1,False = 0 } _Bool;
_Bool IsPositive(int n)
{
if (n > 0)
{
return False;
}
else
{
return True;
}
}
2 区分范围的枚举类型
- class / struct:指定枚举区分范围,转为强类型
- 区分范围的枚举类型访问枚举元素,需要使用作用域符号
2.1 类型转换
- 未区分范围的枚举常数可以隐式转换为 int
- 区分范围的枚举常数转换为 int,需要强制转换
- int 转换为区分范围或未区分范围的枚举器时,都需要强制转换
#include<stdio.h>
enum Week{Mon, Tue, Wen=5, Thu, Fri, Sat=5, Sun};
typedef enum class _Bool{ True = 1,False = 0 } _Bool;
_Bool IsPositive(int n)
{
if (n > 0)
{
return _Bool::False;
}
else
{
return _Bool::True;
}
}
int main()
{
int a = Mon;
day = (enum Week)7;
day = (enum Week)(Mon + Wen);
_Bool boo = _Bool::True;
int b = (int)boo;
boo = (enum _Bool)9;
printf("%d\n", boo);
return 0;
}