STM32平台,MDK5编译,枚举变量的大小

标准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个字节。

posted @ 2021-04-12 14:03  不明白就去明白  阅读(1038)  评论(0编辑  收藏  举报