C中枚举的大小是多less?

我创build了一组枚举值,但我需要每个枚举值是64位宽。 如果我没有记错,枚举的大小通常与int相同; 但我认为我读过的地方(至less在GCC)编译器可以使任何宽度,他们需要保持其值的枚举。 那么,有可能有一个64位宽的枚举吗?

一个enum只能保证足够大的int值。 编译器可以根据定义的枚举常量自由select实际使用的types,因此如果它可以表示您定义的值,则可以select较小的types。 如果您需要枚举常量不适合int您将需要使用特定于编译器的扩展来执行此操作。

取自现行的C标准(C99): http : //www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf

6.7.2.2枚举说明符
[…]
约束
定义枚举常量值的expression式应该是一个整数常量expression式,其值可以表示为int。
[…]
每个枚举types应与char,有符号整数types或无符号整数types兼容。 types的select是实现定义的,但是应该能够表示枚举的所有成员的值。

编译器并不擅长遵循这个标准,但实质上是:如果你的枚举拥有除int之外的其他东西,那么你就处于深深的“不受支持的行为,可能会在一两年内回到你的领域”。

虽然以前的答案是正确的,但一些编译器可以select打破标准并使用包含所有值的最小types。

GCC示例:

 enum ord __attribute__ ((__packed__)) { FIRST = 1, SECOND, THIRD, }; STATIC_ASSERT( sizeof(enum ord) == 1 ) 

存储大小不受枚举值的影响。 存储大小是实现定义的,但大多数是sizeof(int)

我们无法控制枚举variables的大小。 它完全依赖于实现,编译器给出了使用枚举来存储整数的名称的选项,所以enum跟随整数的大小。

考虑:

 enum value{a,b,c,d,e,f,g,h,i,j,l,m,n}; value s; cout << sizeof(s) << endl; 

这将使输出为4.因此,无论枚举包含的元素数量如何,其大小始终是固定的。