多行枚举是否由换行符分隔,然后逗号总是可移植的?

时间:2013-09-13 21:51:28

标签: c++ c enums c99 c++03

以此枚举作为问题的例子

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

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

  • Visual Studio 2010
  • 适用于ARM 6.21的IAR Embedded Workbench
  • g ++(Ubuntu / Linaro 4.6.3-1ubuntu5)4.6.3
  • gcc(Ubuntu / Linaro 4.6.3-1ubuntu5)4.6.3

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

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

4 个答案:

答案 0 :(得分:4)

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

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

enum { value, };

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

答案 1 :(得分:2)

在C和C ++语言中,令牌之间空白字符的数量和选择无关紧要。所以,这与enum {one=1,two=2,three=3};完全相同。你需要一些空格的唯一时间是你有两个没有“非单词”分隔符的关键字,如逗号,括号,冒号等。

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

答案 2 :(得分:2)

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

所以这相当于:

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

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

答案 3 :(得分: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 };