为什么我们需要C中的枚举数据类型,尽管它比通过一个变量字符串实现它使用更多的内存。
例如,如果我们的枚举为:`enum month {janueary, february, march, april, may, june, july, august, september, november, december};
enum moth aMonth;
aMonth = "janueary"
aMonth = "february"
此枚举在内存中分配12*4个字节。如果我们用一根绳子来装这12个元素,它将更有效率,因为我们节省了更多的内存。在这种情况下,代码将为:
char *aMonth;
aMonth = "janueary"
aMonth = "february"
and so on.
如果枚举是例如
enum month{januearyyyy,february};
即字符串字符分配两个以上的整数分配我们可以使用例如#define
:
#define janueary 0
等等。甚至不分配任何变量。
只为一个常数值保留4个字节是没有道理的!
一些书中提到了enum的概念,即您可以在enum的变量中只存储enum的元素,而不存储其他值。但大多数编译器允许您将标识符用作普通整数变量,并使用其他值。
那么,使用枚举数据类型有什么好处呢?
enum month aMonth;
很明显,CCD_ 2的值应该只来自枚举中声明的一组常量。如果你使用宏,你会声明它:
int aMonth;
没有什么告诉你哪些价值观是合适的或不合适的。
正如你所注意到的,当你为变量赋值时,C并不能阻止你使用枚举类型之外的值,但编译器仍然可以对此发出警告。如果没有类型声明,编译器就无法知道该警告什么。
声明枚举不会保留任何内存。内存只分配给变量,而不是结构和枚举的声明。枚举的大小不乘以元素的数量——sizeof(enum month)
不是12*4
。编译器可以使用任何大到足以容纳所有值的整数类型;对于enum month
,它可以使用unsigned char
,所以它只有1个字节(但我认为大多数编译器默认为枚举使用int
,所以它们将是4个字节)。