该标准指出,枚举类型之间是整体式char,signed和unsigned。
但是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)
OP:标准说枚举类型是char,signed和之间的整数类型unsigned。
\nA:接近,但不完全是。 查看更多@alk
\n\n\n\n
char每个枚举类型应与有符号整数类型或无符号整数类型兼容。类型的选择是实现定义的,但应能够表示枚举的所有成员的值。C11dr \xc2\xa76.7.2.2 4
OP:但是int在 32 位机器上应该是 4 个字节,在 64 位机器上应该是 8 个字节。
\nA:不。虽然很常见,但处理器的字大小int通常是相同的,但 C 规范并不要求这一点,并且许多实现不遵循这一点,特别是在使用 32 位 的 64 位机器上的编译器时int。此外,8 位处理器(2014 年在嵌入式领域仍然很常见)至少需要 16 位处理器int才能兼容。
OP:为什么 64 位机器上的 GCCsizeof从这个枚举开始返回 4?
\nA:这是编译器的选择。可能与大小匹配int,这在 64 位编译器中相当常见。