标准C并没有明确规定枚举类型占用空间的大小,标准中只是说“枚举类型的尺寸是以能够容纳最大枚举子的值的整数的尺寸”,同时标准中也说明了:“枚举类型中的枚举值必须要能够用一个int类型表述”,也就是说,枚举类型的尺寸不能够超过int类型的尺寸,但是是不是必须和int类型具有相同的尺寸呢?
上面的标准已经说得很清楚了,只要能够容纳最大的枚举子的值的整数就可以了,那么就是说可以是char、short和int。
不同的C编译器,对enum类型的大小作了不同的定义,而程序员是不能人为的修改枚举类型占用空间的。
今天工作用到了,想查一下枚举类型占多少个字节,
typedef enum { CN_LANGUAGE = 1, EN_LANGUAGE = 0xff, } System_Language;
测试:
typedef enum { CN_LANGUAGE = 1, EN_LANGUAGE = 0xffff, } System_Language;
测试:
当我试图,把EN_LANGUAGE赋值0xFFFFFFFF时,MDK5已经报警了。。。。
结论:STM32平台,MDK5编译,枚举变量的大小,为随着最大的枚举值而改变,可以是 1,2, 4个字节,但是由于枚举值不能超过int最大值,所以最大为4个字节。