不同编译器的枚举大小(以字节为单位)[重复]

问题描述 投票:0回答:2

枚举的大小在不同编译器(gcc、Visual C 等?)中始终相同。也就是说,特定枚举的 sizeof() 是否对每个遵循 C/C++ 标准的编译器给出相同的值?

c++ c enums
2个回答
14
投票

不。

在 C 和 C++ 中,枚举的大小使得所有值都可以表示并与整数类型兼容。不同的编译器可能使用不同的算法来选择类型(如果没有由另一个标准指定,例如明确定义的 ABI)。 (C++11 允许使用新语法指定底层类型)


2
投票

“每个枚举类型应与 char(有符号的)兼容” 整数类型,或无符号整数类型。类型的选择是 实现定义的)但应能够代表 枚举所有成员的值。”

“...实现可能会延迟选择哪种整数类型 直到看到所有枚举常量。”

ISO/IEC 9899:1999 (E) 第 105 页

所以我们只有 sizeof(enum) 的上限。在大多数系统上,我的 sizeof(enum) = 4,但 STM 编译器根据 enum 中写入的值使 sizeof(enum) = 1/2/4

编辑:似乎您可以将枚举值之一设置为 max int 以确保编译器选择整数作为枚举大小。

© www.soinside.com 2019 - 2024. All rights reserved.