标准表示枚举类型是char
,signed
和unsigned
之间的整数类型。
但是{32}机器中的int
应该是4字节,而进入64位机器应该是8字节。
那么为什么我的GCC进入64位机器会返回4作为此枚举的sizeof
?
enum color
{
RED,
GREEN,
BLUE
};
size_t t = sizeof (enum color); // here 4
答案 0 :(得分:2)
OP:标准表示枚举类型是char
,signed
和unsigned
之间的整数类型。
答:关闭,但不完全。 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位编译器相当普遍。