定义枚举类型是否具有大量内存印记?

Flo*_*011 2 c embedded enums arm iar

我正在使用具有32K内存的嵌入式设备,使用IAR EWARM v6.30以纯C语言编写.

为了使代码更具可读性,我想定义一些枚举类型,例如,类似的东西

{RIGHT_BUTTON, CENTER_BUTTON, LEFT_BUTTON}
Run Code Online (Sandbox Code Playgroud)

而不是使用0,1,2值,但我担心它会占用已经稀缺的额外内存.

所以我有两个问题:1)我可以强制枚举为int的短或字节类型intead吗?2)定义枚举类型的确切记忆印记是什么?

Cli*_*ord 6

在完全符合ISO C的情况下,枚举常数的大小和类型是signed int.某些嵌入式系统编译器故意不将其作为优化或扩展.

在ISO C++中" 枚举的基础类型是一个整数类型,可以表示枚举中定义的所有枚举器值. ",因此编译器可以自由使用尽可能小的类型,而且大多数都可以,但没有义务这样做所以.

在您的情况下(IAR EWARM),手册明确指出:

在此输入图像描述

无需任何选项,实际上您需要使用--enum_is_int强制合规行为.其他编译器可能表现不同或具有不同的扩展,编译指示或选项来控制它.这些事情通常会在文档中定义.