以此枚举作为问题的例子
enum
{
one = 1
, two = 2
, three = 3
};
我已经使用以下编译器编译了这个枚举而没有问题:
C99和C ++ 03是否支持此语法?
话虽如此,我想避免讨论为什么要使用这种语法。
答案 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
};