这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 终于弄明白了enum变量占几个字节的存储空间了

共1条 1/1 1 跳转至

终于弄明白了enum变量占几个字节的存储空间了

院士
2025-11-24 16:34:04     打赏

在嵌入式软件开发中,enum变量的作用非常明显。在中文翻译中,程序员号编程书多翻译为“枚举变量”,多用来定义声明真值有限,且确定含义的一组集合的变量。由于是真值有限,并且需要自己定义。在我过往的程序设计中enum变量在声明定义时,多数没有超过20个。所以,我一直以为enum变量只占用1个字节。那事实是这样的吗?来,做个实验验证一下!

我们设计一个LED灯的枚举量定义:

typedef enum {
    led_action_off = 0,
    led_action_on,
    led_action_blink,
    led_action_fastblink,
    led_action_breath,
}led_action_e;

再声明一个变量led0,即:

led_action_e led0;

我们可以看到打印出来的数值为1,代表enum类型的led_action_e的占用空间大小为1字节。

enum类型01.jpg

但这是最终结果吗?我们再来编译,并运行一下。结果居然如下:

enum类型02.jpg

这时,可以看到led_action_e的占用空间大小又变成了4字节。两次编译,两次不同的结果。为什么呢?

因为我修改了Keil的编译选项。

enum类型03.jpg

在关闭编译器的Short enums/wchar选项之后,enum变量将统一按照int类型来定义,否则,按照enum定义的数值容量来定义。比如enum的值大于255了,则其将自动扩展为2字节,以此类推。

enum类型在嵌入式软件开发中的作用非常强大,定义enum类型的变量不仅可以实现数值的比较,状态值的定义,而且在代码阅读上面更提供了便利。虽然,在编译器看来,其就是一个整数类型而已。





关键词: enum     存储空间    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]