答案 0 :(得分:14)
没有。
在C和C ++中,枚举的大小应使所有值都能表示并与整数类型兼容。不同的编译器可以使用不同的算法来选择类型(如果它没有被另一个标准指定,例如明确定义的ABI)。 (C ++ 11允许使用新语法指定基础类型)
答案 1 :(得分:2)
“每个枚举类型应与char签名,签名 整数类型或无符号整数类型。类型的选择是 实现定义的)但应能够代表 枚举的所有成员的值。“
“......实现可能会延迟选择哪种整数类型 直到看到所有枚举常数。“
ISO / IEC 9899:1999(E)p.105
因此我们只有sizeof(enum)的上限。在大多数系统上,我有sizeof(enum)= 4,但STM编译器使sizeof(enum)= 1/2/4取决于枚举中的值
编辑:似乎你可以将你的一个枚举值设置为max int,以确保编译器选择整数作为枚举大小。