Помеченные операторы не могут быть объявлениями.
case 2:
это ярлык. Метка может применяться только к оператору в грамматике Си. Объявление в грамматике C не является оператором . Один из способов исправить это - поставить нулевой оператор, такой как ;
после метки:
case 2:
;
struct Contacto Contactos;
Другой способ заключается в том, чтобы заключить код дела в составное утверждение:
case 2:
{
struct Contacto Contactos;
…
}
Последнее также имеет то преимущество, что ограничивает область объявления, что предотвращает случайное использование кода в других случаях в этом случае.
В грамматике C оператор является одним из:
- A составной оператор ,
{
… }
.
- оператор-выражение , такой как оператор присваивания, вызов функции и другие выражения.
- A оператор выбора ,
if
или switch
.
- оператор итерации ,
while
, do
или for
.
- A оператор перехода ,
goto
, continue
, break
или return
.
Объявление вообще не является оператором и может появляться только в области видимости файла, внутри составного оператора или в некоторых частях объявлений функций .