1

以这个枚举为例来回答这个问题

enum
{
     one = 1
   , two = 2
   , three = 3
};

我已经用以下编译器编译了这个枚举,没有问题:

  • 视觉工作室 2010
  • 适用于 ARM 6.21 的 IAR 嵌入式工作台
  • g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
  • gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

C99 和 C++03 是否保证支持此语法?

话虽如此,我想避免讨论为什么要使用这种语法

4

4 回答 4

4

额外的空格或空格的特定选择在定义 an 的上下文中完全不相关,enum并且枚举数由逗号分隔。因此,定义枚举器的引用方式肯定包含在 C++ 标准(其所有版本)和 C99 及更高版本的标准中(我不对 C90 提出任何要求,因为我对 C90 不够熟悉,而且我不方便,但我认为enum定义也适用)。此外,在所有这些情况下,enum都可以是匿名的。

有趣的问题是在最后一个枚举数之后支持逗号,例如

enum { value, };

并非所有标准都涵盖。它包含在 C99 及更高版本中。我不认为 C++03 支持尾随逗号,但 C++11 支持它。

于 2013-09-13T22:04:04.893 回答
2

在 C 和 C++ 语言中,标记之间的空格字符的数量和选择无关紧要。所以,这与enum {one=1,two=2,three=3};. 唯一需要一些空格的情况是,如果您有两个没有“非单词”分隔符的关键字,例如逗号、括号、冒号等。

所以是的,如果这在编译器中是不可接受的,那么该编译器就是不符合标准的编译器。

于 2013-09-13T22:00:34.943 回答
2

C 和 C++ 允许您在标记之间添加任意数量的空格和换行符。

所以这相当于:

enum
{
   one = 1,
   two = 2,
   three = 3
};

但当然,你的风格有点不寻常……

于 2013-09-13T22:01:03.303 回答
0

是的,保证在 C99 和 C++03 下得到支持

 enum
{
     one = 1
   , two = 2
   , three = 3
};  

被认为与以下相同

enum
{
     one = 1 ,
     two = 2 ,
     three = 3 
};  

或者

enum { one = 1 , two = 2 , three = 3 };

于 2013-09-13T22:00:08.370 回答