Возьми это перечисление как пример к вопросу
enum
{
one = 1
, two = 2
, three = 3
};
Я скомпилировал это перечисление со следующими компиляторами без проблем:
Этот синтаксис гарантированно поддерживается в C99 и C ++ 03?
С учетом сказанного, я хотел бы избежать обсуждения о том, почему использовать этот синтаксис.
Дополнительный пробел или конкретный выбор пробелов совершенно не имеет значения в контексте определения enum
и перечислители разделяются запятой. Таким образом, способ цитатного определения перечислителей определенно охватывается стандартом C ++ (все его версии) и стандартами C99 и более поздними версиями (я не претендую на C90, потому что я недостаточно знаком с C90 и не знаю иметь под рукой, но я считать enum
там тоже работает определение). Кроме того, во всех этих случаях enum
может быть анонимным
Интересным вопросом является поддержка запятой после последних перечислителей, например
enum { value, };
который не покрывается всеми стандартами. Это покрыто C99 и позже. Я не думаю, что конечная запятая поддерживается C ++ 03, но поддерживается C ++ 11.
Количество и выбор символа для пробела между токенами не имеют значения в языках C и C ++. Итак, это точно так же, как enum {one=1,two=2,three=3};
, Единственный раз, когда вам нужны НЕКОТОРЫЕ пробельные символы, это если у вас есть два ключевых слова без разделителей «без слов», таких как запятая, скобка, двоеточие и т. Д.
Так что да, если это не приемлемо в компиляторе, этот компилятор является нестандартным компилятором.
C и C ++ позволяют добавлять произвольное количество пробелов и символов новой строки между токенами.
Так что это эквивалентно:
enum
{
one = 1,
two = 2,
three = 3
};
Но, конечно, у вас есть несколько необычный стиль …
Да, гарантированно поддерживается в C99 и C ++ 03
enum
{
one = 1
, two = 2
, three = 3
};
считается таким же, как показано ниже
enum
{
one = 1 ,
two = 2 ,
three = 3
};
или же
enum
{
one = 1 ,
two = 2 ,
three = 3
};