我正在创建一组枚举值,但我需要每个枚举值为64位宽.如果我没记错的话,枚举通常与int的大小相同; 但是我认为我读过某个地方(至少在GCC中),编译器可以使枚举成为保持其值所需的任何宽度.那么,有可能有一个64位宽的枚举?
Rob*_*ble 97
一个enum
只保证大到足以容纳int
值.编译器可以根据定义的枚举常量自由选择使用的实际类型,因此如果它可以表示您定义的值,它可以选择较小的类型.如果您需要不适合的枚举常量,int
则需要使用特定于编译器的扩展来执行此操作.
Mic*_*tum 90
取自目前的C标准(C99):http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
6.7.2.2枚举说明符
[...]
约束条件
定义枚举常量值的表达式应为整数常量表达式,其值可表示为int.
[...]
每个枚举类型应与char,有符号整数类型或无符号整数类型兼容.类型的选择是实现定义的,但应能够表示枚举的所有成员的值.
并不是说编译器擅长遵循标准,但实质上是:如果你的枚举除了int之外还有其他东西,那么你就会陷入深深的"不支持的行为,可能会在一两年之后再次咬你".
Kev*_*Cox 13
虽然之前的答案是正确的,但是一些编译器可以选择破坏标准并使用包含所有值的最小类型.
GCC示例(GCC手册中的 doucmentation ):
enum ord {
FIRST = 1,
SECOND,
THIRD
} __attribute__ ((__packed__));
STATIC_ASSERT( sizeof(enum ord) == 1 )
Run Code Online (Sandbox Code Playgroud)