C语言基础:枚举与类型定义

一、枚举类型

枚举类型是C语言中的一种特殊类型,枚举类型可以让我们的程序使用一些固定长度和固定数值的变量值范围。定义枚举类型使用如下方式:

enum 枚举类型 {枚举值列表};

例如,我们可以定义一个枚举类型的值范围是周日至周五的星期类型,或一月至十二月的月份类型:

enum week
	Su, Mo, Tu, We, Th, Fr, Sa
enum month
	January, February, March, April, May, June, July, August, September, October, November, December
};


定义了枚举类型之后,就可以根据需要定义枚举类型的变量,并使用它们,例如:


enum week a, b, c;
a = Su;
b = Mo;
c = Tu;
enum month d, e, f;
d = January;
e = February;
f = March;

那么枚举类型的值究竟是多少呢?我们可以使用printf函数来将a、b、c、d、e、f这6个变量的值显示出来,显示格式指定为整型:


enum week a, b, c;
a = Su;
b = Mo;
c = Tu;
printf("%d %d %d\n", a, b, c);
enum month d, e, f;
d = January;
e = February;
f = March;
printf("%d %d %d\n", d, e, f);
0 1 2
0 1 2

可以看到枚举类型的值其实就是从0开始正整数的序列,也就是说枚举类型其实是为了编程者方便的书写和理解程序代码而设定的一种具有特定使用功能的变量,这些变量的值其实就是从0开始的正整数。其实枚举类型与整数类型没有什么太大的区别,例如我们同样可以定义两个int类型的变量表示星期和月份,对星期变量赋值时采用0~6表示周日到周五,而对月份赋值时采用0~11表示一月到十二月。

定义枚举类型的好处是可以让编程者方便的使用自定义的变量值来替代数字值,这样会使我们的代码有更高的可读性,而从本质上讲枚举除了在代码中是以文字形式出现的变量值之外(内部还是数字)与整数值其实并没有什么区别。


二、类型定义

使类型定义时需要使用类型定义符typedef,它的功能是可以将一个原有的变量类型定义一个新的变量类型,例如:


typedef char s8;
typedef unsigned char u8;
typedef short s16;
typedef unsigned short u16;
typedef int s32;
typedef unsigned int u32;
typedef long long s64;
typedef unsigned long long u64;