2011-09-07 138 views

回答

14

在C和C++的枚举将具有的尺寸使得所有的值可以被表示,并与整数类型兼容。不同的编译器可能使用不同的算法来选择类型(如果它没有被另一个标准如明确定义的ABI所指定)。 (C++ 11允许指定一个新的语法的基础类型)

+0

不一定:C允许编译器选择枚举值的类型,就像根据你的答案一样,C++。参见[C标准](http://www.open-std.org/JTC1/sc22/wg14/www/docs/n1256.pdf)中的6.7.2.2/4节。 – pmg

+0

此外,在C++ 0x中,您可以使用新的* enum类*指定将用于支持枚举值的整数类型。 –

+0

@pmg,谢谢。我不知道我在哪里。我查过它已经是C90的情况。 – AProgrammer

2

“每一枚举类型应与炭兼容,一个有符号的整数 型或无符号的整数类型。类型的选择是 实现定义的),但应能够表示枚举的所有成员的值。“

“...一个实现可能会延迟选择哪个整数类型 ,直到看到所有枚举常量。”

ISO/IEC 9899:1999(E)第105页

所以我们只有上边界的sizeof(ENUM)。在大多数我sizeof(枚举)= 4,但STM编译器作出sizeof(枚举)= 1/2/4取决于在枚举中写入的值的系统

编辑:你似乎可以设置您的枚举值之一max int以确保编译器选择整数作为枚举大小。

相关问题