【问题标题】:Enumeration constant declaration vs. definition - C standard枚举常量声明与定义 - C 标准
【发布时间】:2018-08-29 17:50:27
【问题描述】:

C11 标准在section 6.7/5 中指定:

C11 6.7/5

标识符的定义是对该标识符的声明 那:

(...)

——对于枚举常量,是(唯一的)声明 标识符;

(...)

上述段落的措辞是否表明

  1. 枚举常量的定义是(唯一的)声明

  2. 枚举常量的定义是(唯一的)声明?

【问题讨论】:

  • 这意味着你不能在不定义枚举常量的情况下声明它。这也意味着您不能转发声明枚举常量。但是,范围仍然适用,因此您可以拥有:enum { NAME1, NAME2 }; void function(void) { enum { NAME1 = 37, NAME2 = -57 }; … }

标签: c language-lawyer declaration definition c11


【解决方案1】:

这意味着声明一个枚举常量也定义了它。

因此,枚举常量在翻译单元的范围内不能出现多次。例如,下面的代码是无效的,因为它重新声明了一个枚举常量:

enum a {
    AAA,
    BBB
};

enum b {
    BBB,   // error, redeclaration
    CCC
};

【讨论】:

  • 所以是 2.?因为 1. 没有任何意义。
  • @Sinushyperbolikus 正确。由于只能有一个声明(这也是定义),因此讨论多个声明是没有意义的。
猜你喜欢
  • 2014-06-30
  • 1970-01-01
  • 2015-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多