在64位机器上,枚举的大小。

20 浏览
0 Comments

在64位机器上,枚举的大小。

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

但是,一个int在32位机器上应该是4字节,在64位机器上应该是8字节。

那么为什么我的GCC在64位机器上返回这个枚举的sizeof为4呢?

enum color
{
  RED,
  GREEN,
  BLUE
};
size_t t = sizeof (enum color); // 这里是4

0
0 Comments

问题的出现的原因是C语言标准规定枚举类型的底层类型可以是char、signed int或unsigned int,具体的选择由编译器决定。而问题中的提问者认为在64位机器上int应该是8个字节,但实际上C语言标准并不要求int和处理器的字长相同,因此很多64位机器上的编译器使用32位的int。因此,GCC在64位机器上返回4作为该枚举类型的sizeof是合理的选择,以匹配int的大小。

解决方法是使用特定的编译器选项或者指定枚举类型的底层类型来控制枚举类型的大小。但需要注意的是,这样做可能会导致代码在不同的编译器或平台上的行为不一致。

总结起来,sizeof of an enum on 64 bit machine返回4的原因是C语言标准对枚举类型的底层类型没有明确规定,编译器可以根据需要选择合适的底层类型来表示枚举类型的值。解决方法是使用特定的编译器选项或指定底层类型来控制枚举类型的大小。

0