64位机器上枚举的sizeof

时间:2014-10-03 13:03:50

标签: c enums

标准表示枚举类型是charsignedunsigned之间的整数类型。

但是{32}机器中的int应该是4字节,而进入64位机器应该是8字节。 那么为什么我的GCC进入64位机器会返回4作为此枚举的sizeof

enum color
{
  RED,
  GREEN,
  BLUE
};

size_t t = sizeof (enum color); // here 4

1 个答案:

答案 0 :(得分:2)

OP:标准表示枚举类型是charsignedunsigned之间的整数类型。
答:关闭,但不完全。 See more @alk

  

每个枚举类型应与char,有符号整数类型或   无符号整数类型。类型的选择是实现定义的,但应该是   能够表示枚举的所有成员的值。 C11dr§6.7.2.24

OP:但是32位机器上的int应该是4个字节,而64位机器上的int应该是8个字节。
答:不会。虽然常见,处理器的字大小和int通常是相同的,但C规范并不要求这样做,并且许多实现不遵循这一点,特别是对于使用32位{{64位机器上的编译器1}}。此外,8位处理器(2014年在嵌入式世界中仍然很常见)至少需要16位int才能兼容。

OP:为什么64位机器上的GCC返回4作为此枚举的sizeof? 答:这是编译器的选择。可能匹配int大小,与64位编译器相当普遍。