Почему C разрешает пустое объявление? Они оба явно разрешены на уровне грамматики и генерируют предупреждение только при компиляции.Почему допустимы пустые объявления?
Производство declaration
, из Приложения А стандарта С, что позволяет ему на уровне грамматики:
declaration
= declaration_specifiers , ";"
| declaration_specifiers , init_declarator_list , ";"
| static_assert_declaration
;
(превратился в EBNF
мной)
Потому что они полезны? Это не 'struct tagS {int x; }; 'формально пустое объявление? –
Какую версию стандарта вы смотрите? C11 показывает только второй и третий варианты. – dbush
@BenVoigt Справа! Да, это формальная декларация. structs обрабатываются исключительно как спецификатор declaration_specifiers => type_specifier => struct_or_union. – Leandros