Можливо, я не з цієї планети, але мені здається, що наступною має бути помилка синтаксису:
int a[] = {1,2,}; //extra comma in the end
Але це не так. Я був здивований , коли цей код скомпільовано на Visual Studio, але я навчився не довіряти MSVC компілятор, наскільки правила C ++ стурбовані, так що я перевірив стандарт і це допускається стандартом , а також. Ви можете бачити 8.5.1 для граматичних правил, якщо ви мені не вірите.
Чому це дозволено? Це може бути дурним марним питанням, але я хочу, щоб ви зрозуміли, чому я прошу. Якби це був підзакон загального правила граматики, я би зрозумів - вони вирішили не ускладнювати загальну граматику лише для того, щоб заборонити зайву кому в кінці списку ініціалізатора. Але ні, додаткова кома прямо дозволена. Наприклад, заборонено мати надлишкову кому в кінці списку аргументів функції-виклику (коли функція бере ...
), що є нормальним .
Отже, знову ж таки, чи є якась конкретна причина, коли ця зайва кома явно дозволена?
for()
прикладу), додаючи його, він видає попередження компілятора.
if (x = 1)
не є неоднозначним у граматиці, але це дуже неоднозначно для людей, і таким чином накидає попередження.
if
приклад теж не неоднозначний. Я не думаю, що "неоднозначне" означає те, що ви думаєте, що це означає!
;
коли зрозуміло, що наступний маркер - це насправді наступне твердження.