STM32 枚举类型 内存大小

枚举类型大小与编译器有关,在STM32平台,kei 5编译器,默认情况下枚举类型的内存大小与枚举的最大值的字节大小相同:

定义以下枚举类型:

typedef enum
{
test00 =0x0,
    test01
}Test0;

打印大小如下:


此处最大的枚举值为0x01,只需要1个字节就可以满足需要,因此编译器把此类型的大小只用一个字节来保存!

再开下面的,最大值是0x100,超出0xFF,并且小于0xFFFF,猜测用2位字节表示即可!

typedef enum
{
test10 =0x0,
    test11 = 0x100,
    test12
}Test1;

结果如下:

猜测正确,2字节

再看:

typedef enum
{
test20 =0x0,
    test21 = 0x10000,
    test22

}Test2;

最大值是0x1000,超出0xFFFF,并且小于0xFFFFFFFF,猜测用4位字节表示即可!

结果如下:

猜测又正确,4字节

再看:

typedef enum
{
test30 =0x0,
    test31 = 0x100000000,
    test32

}Test3;

最大值是0x100000000,超出0xFFFFFFFF,并且小于0xFFFFFFFFFFFFFFFF,猜测用8位字节表示即可!

结果如下:

 又对了,但是...

在kei5 平台下,不运行超出4字节的枚举类型,超出部分是未知的,比如我们打印出来test31的值,它并非0x100000000:

在我的电脑里运行的值是0x6000D0,在你们的电脑可能又不一样了。

实际上在定义这个值的时候,编译器就警告了。



由此可以推出,在STM32平台下,枚举类型最大为4字节,朋友们可以在其它平台做测试(比如64位的WINDOWS系统!)

keil5 还可以直接强制设置所有枚举型都是整形:


编译后运行看看:


注意Test0、Test1、Test2变成4字节了,Test3还是8字节,但是它不可用。

因此:

1、枚举类型大小与编译器有关,在STM32平台,kei 5编译器,默认情况下枚举类型的内存大小与枚举的最大值的字节大小相同,但最大字节数不超过4字节,超出部分不可用,情况未知

2、可以通过编译器设定,强制将任何一种枚举型都转为4字节


枚举类型STM32的应用中主要用于定义一组相关的常量。枚举类型允许你为常量赋予有意义的名称,提高了代码的可读性和可维护性。你可以使用enum关键字来定义枚举类型,并为每个常量指定一个名称和一个可选的初始值。在枚举类型中,每个常量都有一个对应的整数值,默认从0开始递增。你也可以手动指定常量的值。 以下是一些关于stm32枚举类型的用法: 1. 基本定义方式: enum 枚举类型名称 {常量1, 常量2, ...}; 例如,定义一个枚举类型表示星期几: enum WeekDay {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}; 2. 定义常量的初始值: 可以为枚举类型的某些常量指定初始值,其他常量将按照指定初始值的顺序递增。 enum 枚举类型名称 {常量1 = 值1, 常量2 = 值2, ...}; 例如,定义一个枚举类型表示月份,并为其中的常量指定初始值: enum Month {January = 1, February, March, April, May, June, July, August, September, October, November, December}; 3. 使用枚举类型: 在代码中可以使用枚举类型来声明变量,并将变量赋值为枚举类型中的常量。 枚举类型名称 变量名 = 常量; 例如,声明一个变量表示今天是星期几,并将其赋值为Tuesday: enum WeekDay today = Tuesday; 4. 使用枚举常量: 你可以在代码中通过枚举类型名称和常量名称来引用枚举常量。 枚举类型名称.常量名称 例如,输出星期五的常量值: printf("%d", WeekDay.Friday);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值