【发布时间】:2011-09-07 13:51:25
【问题描述】:
枚举的大小在不同的编译器(gcc、visual c 和其他编译器)中总是相同的吗?也就是说,特定枚举的 sizeof() 是否与每个遵循 C/C++ 标准的编译器提供相同的值?
【问题讨论】:
-
签名也可能不同。
标签: c++ c compiler-construction enums
枚举的大小在不同的编译器(gcc、visual c 和其他编译器)中总是相同的吗?也就是说,特定枚举的 sizeof() 是否与每个遵循 C/C++ 标准的编译器提供相同的值?
【问题讨论】:
标签: c++ c compiler-construction enums
没有。
在 C 和 C++ 中,枚举的大小使得所有值都可以表示并与整数类型兼容。不同的编译器可能使用不同的算法来选择类型(如果它没有被另一个标准指定,比如明确定义的 ABI)。 (C++11 允许使用新语法指定底层类型)
【讨论】:
"每个枚举类型都应该兼容char,一个有符号的 整数类型,或无符号整数类型。类型的选择是 实现定义),但应能够表示 枚举所有成员的值。”
"...实现可能会延迟选择哪种整数类型 直到看到所有枚举常量。”
ISO/IEC 9899:1999 (E) 第 105 页
所以我们只有 sizeof(enum) 的上限。在大多数系统上,我的 sizeof(enum) = 4,但 STM 编译器根据 enum 中写入的值制作 sizeof(enum) = 1/2/4
编辑:您似乎可以将枚举值之一设置为 max int 以确保编译器选择整数作为枚举大小。
【讨论】: