Возможно, я не с этой планеты, но мне кажется, что синтаксическая ошибка должна быть следующей:
int a[] = {1,2,}; //extra comma in the end
Но это не так. Я был удивлен , когда этот код скомпилирован на Visual Studio, но я научился не доверять MSVC компилятор, насколько правила C ++ обеспокоены, так что я проверил стандарт и это допускается стандартом , а также. Вы можете увидеть 8.5.1 правила грамматики, если не верите мне.
Почему это разрешено? Это может быть глупый бесполезный вопрос, но я хочу, чтобы вы поняли, почему я спрашиваю. Если бы это был подслучайный случай общего правила грамматики, я бы понял - они решили не усложнять общую грамматику, просто запретив избыточную запятую в конце списка инициализатора. Но нет, дополнительная запятая явно разрешена. Например, не допускается иметь избыточную запятую в конце списка аргументов вызова функции (когда функция принимает ...
), что является нормальным .
Итак, опять же, есть ли какая-то особая причина, по которой эта избыточная запятая явно разрешена?
for()
), добавление его вызывает предупреждение компилятора.
if (x = 1)
же не является двусмысленным в грамматике, но это очень двусмысленно для людей, и поэтому выдает предупреждение.
if
пример тоже не является двусмысленным. Я не думаю, что «неоднозначно» означает то, что вы думаете, что это значит!
;
когда ясно, что следующий токен - это на самом деле следующее утверждение.