【问题标题】:sizeof of an enum on 64 bit machine64位机器上枚举的大小
【发布时间】:2014-10-03 13:03:49
【问题描述】:

标准规定枚举类型是charsignedunsigned 之间的整数类型。

但是int 进入 32 位机器应该是 4 字节,进入 64 位机器应该是 8 字节。 那么为什么我的 GCC 进入 64 位机器返回 4 作为这个枚举的sizeof

enum color
{
  RED,
  GREEN,
  BLUE
};

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

【问题讨论】:

标签: c enums


【解决方案1】:

OP:标准规定枚举类型是charsignedunsigned 之间的整数类型。
答:接近,但不完全。 See more@alk

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

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

OP:为什么 64 位机器上的 GCC 将 4 作为此枚举的 sizeof 返回?
A:这是编译器的选择。可能匹配 int 大小,在 64 位编译器中相当常见。

【讨论】:

  • 我认为他的编译器使用的是 LP64 编程模型。如果我没记错的话, int 是 32 位的。
猜你喜欢
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 1970-01-01
  • 2014-01-10
相关资源
最近更新 更多