C '的值是多少;四';在枚举数中?

C '的值是多少;四';在枚举数中?,c,enums,C,Enums,我是C语言的新手。我发现一个问题,要求用C语言查找枚举数的值。确切的问题写在下面: 考虑以下C语言的声明 请帮助我在这些枚举数中找到“four”的值。另外,请告诉我这个枚举声明是如何工作的?它应该是-4。C99标准的相关章节(§6.7.2.2,第3节)规定: 语义 枚举器列表中的标识符声明为 具有int类型,并且可以在允许的任何地方出现。109)一个 带=的枚举数将其枚举常量定义为 恒定表达式。如果第一个枚举数没有=,则 其枚举常量为0。每个后续枚举数都没有= 将其枚举常量定义为常量的值 将上一

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

考虑以下C语言的声明


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

它应该是
-4
。C99标准的相关章节(§6.7.2.2,第3节)规定:

语义

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


引用ISO/IEC 9899:TC3.

你可以轻松地测试它。代码作者在写这篇文章时说,只要值是唯一的,他们就不在乎它是什么。您也不应该这样做。@marounnaroun好吧,公平地说,尽管这对测试来说很琐碎,但单独测试确实可以揭示是否保证每个兼容的C编译器每次的结果都是相同的。@keshlam代码确实存在,它依赖于为简洁起见分配连续的enum值的“递增一”行为,即使准确的数值很重要。在某些情况下,这可能是错误的风格,但在我看来,这一问题是正确的。@keshlam:在枚举中列出一个没有值的标识符既不意味着它的值是唯一的,也不意味着作者不关心它的值。规则是,每个没有
=
的标识符都被赋予一个比前一个标识符大一个的值,而不管是否已经存在另一个具有相同值的标识符。这通常用于设置所需间隔的第一个标识符,然后列出剩余的标识符,如
enum foo{ten=10,11,12,13}
中所示。
enum numbers {one = 5, two = -6, three, four};