64位计算机上枚举的大小

xde*_*000 5 c enums

该标准指出,枚举类型之间是整体式charsignedunsigned

但是int到32位计算机中应为4字节,而到64位计算机中应为8字节。那么,为什么sizeof从这个枚举开始,我的GCC进入64位计算机会返回4 ?

enum color
{
  RED,
  GREEN,
  BLUE
};

size_t t = sizeof (enum color); // here 4
Run Code Online (Sandbox Code Playgroud)

chu*_*ica 4

OP:标准说枚举类型是char,signed和之间的整数类型unsigned
\nA:接近,但不完全是。 查看更多@alk

\n\n
\n

char每个枚举类型应与有符号整数类型或无符号整数类型兼容。类型的选择是实现定义的,但应能够表示枚举的所有成员的值。C11dr \xc2\xa76.7.2.2 4

\n
\n\n

OP:但是int在 32 位机器上应该是 4 个字节,在 64 位机器上应该是 8 个字节。
\nA:不。虽然很常见,但处理器的字大小int通常是相同的,但 C 规范并不要求这一点,并且许多实现不遵循这一点,特别是在使用 32 位 的 64 位机器上的编译器时int。此外,8 位处理器(2014 年在嵌入式领域仍然很常见)至少需要 16 位处理器int才能兼容。

\n\n

OP:为什么 64 位机器上的 GCCsizeof从这个枚举开始返回 4?
\nA:这是编译器的选择。可能与大小匹配int,这在 64 位编译器中相当常见。

\n