【问题标题】:What will be the value for 'four' in enum numbers?枚举中“四”的值是多少?
【发布时间】:2014-02-20 14:23:45
【问题描述】:

我是 C 语言的新手。我发现了一个问题,要求在 C 语言中查找枚举数的值。确切的问题写在下面:

考虑下面的 C 语言声明

enum numbers {one = 5, two = -6, three, four};

请帮我在这些枚举数中找到“”的值。另外请告诉我这个枚举声明是如何工作的?

【问题讨论】:

  • 您可以轻松测试它。
  • 代码作者写这篇文章的意思是他们不关心只要它是唯一的值会是什么。你也不应该。
  • @MarounMaroun 好吧,说句公道话,尽管这对测试来说微不足道,但单独测试确实揭示了每个兼容的 C 编译器是否保证每次结果都相同。
  • @keshlam 代码确实存在,它依赖于为简洁分配连续的enum 值的“递增”行为,即使确切的值确实很重要。在某些情况下,这可以说是不好的风格,但在我看来,这个问题是有道理的。
  • @keshlam:在枚举中列出没有值的标识符既不意味着它的值将是唯一的,也不意味着作者不关心它的值。规则是每个没有= 的标识符都被赋予一个比前一个标识符大一的值,而不管是否已经存在另一个具有相同值的标识符。这通常用于设置所需间隔的第一个标识符,然后列出剩余的标识符,如enum foo { ten = 10, eleven, twelve, thirteen }

标签: c enums


【解决方案1】:

应该是-4。 C99 标准的相关部分(第 6.7.2.2 节,第 3 节)指出:

语义

枚举器列表中的标识符被声明为常量 具有 int 类型,并且可以出现在任何允许的地方。109) 一个 带 = 的枚举器将其枚举常量定义为 常量表达式。如果第一个枚举数没有 =,则值为 它的枚举常数为 0。每个后续的枚举数都没有 = 将其枚举常量定义为常量的值 前一个值加 1 得到的表达式 枚举常数。 (使用枚举器 = 可能会产生枚举常量,其值与同一枚举中的其他值重复。)枚举的枚举数是 也称为其成员。

引自 ISO/IEC 9899:TC3。

【讨论】:

    猜你喜欢
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 2010-09-13
    • 2011-05-09
    • 1970-01-01
    相关资源
    最近更新 更多