Объявление без объявления init:
<declaration> ::= {<declaration-specifier>}+ {<init-declarator>}* ;
безвредно для списков спецификаторов объявлений, которые не являются единичным спецификатором enum
/ struct
/ union
, и полезно соответствует тем, которые .
В любом случае, представленная грамматика также будет ошибочно соответствовать объявлениям, таким как int struct foo x;
или double _Bool y;
(она позволяет использовать несколько спецификаторов для сопоставления с такими вещами, как long long int
), но все это может быть обнаружено позже. в проверке семанти c.
Сама грамматика BNF не отсеет все недопустимые конструкции.