【问题标题】:Size of enums in bytes of different compilers [duplicate]不同编译器的枚举大小(以字节为单位)[重复]
【发布时间】:2011-09-07 13:51:25
【问题描述】:

枚举的大小在不同的编译器(gcc、visual c 和其他编译器)中总是相同的吗?也就是说,特定枚举的 sizeof() 是否与每个遵循 C/C++ 标准的编译器提供相同的值?

【问题讨论】:

  • 签名也可能不同。

标签: c++ c compiler-construction enums


【解决方案1】:

没有。

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

【讨论】:

  • 不一定:C 允许编译器选择枚举值的类型,就像根据您的回答,C++ 一样。请参阅the C Standard 中的第 6.7.2.2/4 节。
  • 此外,在 C++0x 中,您可以使用新的 enum 类 来指定将用于支持枚举值的整数类型。
  • @pmg,谢谢。我不知道我从哪里得到的。我检查了它在 C90 中已经是这种情况。
【解决方案2】:

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

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

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

所以我们只有 sizeof(enum) 的上限。在大多数系统上,我的 sizeof(enum) = 4,但 STM 编译器根据 enum 中写入的值制作 sizeof(enum) = 1/2/4

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    相关资源
    最近更新 更多