【问题标题】:Is assigning a type to an enum standard C?是否将类型分配给枚举标准 C?
【发布时间】:2020-10-08 02:25:53
【问题描述】:

我见过像这样的enum 声明:

enum ProgrammingLanguage: unsigned char {
    C = 0,
    CPlusPlus,
    Rust,
    Java,
    Javascript,
    Python
};

这只会为这种类型分配一个字节。我的问题是,这是标准 C 还是 GCC 扩展?如果我决定这样做,是否需要担心便携性?

【问题讨论】:

  • 这不在标准 C 中。它是 C++ 特性
  • @M.M 你确定吗?那将是一种耻辱。
  • 我试过的任何 gcc 版本都不接受它
  • @M.M 那么这是 macOS 的功能。在 C 文件中的 Xcode 中编译它是可行的。
  • 我猜你实际上是在使用 clang(试试gcc -v)。一些 macOS 开发人员有一个绝妙的主意,将 gcc 别名为 clang

标签: c types enums enumeration portability


【解决方案1】:

附录 A 6.7.2.2 将枚举定义为:

(6.7.2.2) enum-specifier:
  enum identifier-opt { enumerator-list }
  enum identifier-opt { enumerator-list,}
  enum identifier

【讨论】:

  • 您的回答不如其他回答有用,但为您的时间 +1
  • 嗯。最终答案“是”或“否”取决于identifier-opt 的定义,对吗?
【解决方案2】:

这是标准C吗

不,这不是 C 语言的一部分。

GCC 扩展?

不,这不是 C 语言的 GCC 扩展。

如果我决定这样做,是否需要担心可移植性?

您需要担心使用任何 C 编译器编译此类代码。

这只是 C++ 功能。

那么它是一个 macOS 功能。在 C 文件中的 Xcode 中编译它是可行的

这是一个clang extension

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 2021-12-26
    • 2020-08-16
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多