visual studio — С++: в операторе switch отсутствует точка с запятой перед закрывающей скобкой
спросил
Изменено 3 года, 11 месяцев назад
Просмотрено 3к раз
В интересах будущих читателей и моего собственного здравомыслия позже я хотел бы сделать это абсолютно ясным, что операторы переключения , которые не имеют случая по умолчанию (поскольку все случаи охвачены) или последовательные if-elseif-else с концом else, который ничего не должен делать, не должны быть опущены, и комментарий на этот счет должен быть включены (см. пример).
Однако всякий раз, когда я включаю случай по умолчанию в оператор switch и оставляю его пустым, я должен поставить точку с запятой внутри случая по умолчанию или ошибка компилятора: «Строка [Строка закрывающей скобки оператора switch]` отсутствующий ‘;’ до появления ‘}'».
ПРИМЕР: СОЗДАЕТ ОШИБКУ КОМПИЛЯТОРА
переключатель(направление) {
случай MOVE_UP:
//...
перерыв;
случай MOVE_RIGHT:
//...
перерыв;
случай MOVE_DOWN:
//...
перерыв;
случай MOVE_LEFT:
//...
перерыв;
по умолчанию:
/* НИЧЕГО НЕ ДЕЛАТЬ */
}
ПРИМЕР: НЕ СОЗДАЕТ ОШИБКУ КОМПИЛЯТОРА
переключатель(направление) {
случай MOVE_UP:
//...
перерыв;
случай MOVE_RIGHT:
//...
перерыв;
случай MOVE_DOWN:
//...
перерыв;
случай MOVE_LEFT:
//...
перерыв;
по умолчанию:
/* НИЧЕГО НЕ ДЕЛАТЬ */;
}
- c++
- визуальная студия
- ошибки компилятора
- оператор переключения
2
Потому что вам нужно заявление для вашего случая по умолчанию . Точка с запятой — это пустой оператор.
6.1/1 в C++03 дает грамматику для оператора с меткой:
помеченный оператор :
идентификатор : выписка
case константное выражение : выписка
по умолчанию: заявление
С++ 11 то же самое, за исключением того, что вы можете иметь атрибуты перед меткой.
Последовательность токенов нулевой длины не является оператором в C++, следовательно, по умолчанию: сам по себе не является помеченным оператором .
Тем не менее, я не знаю, какова была мотивация, почему грамматика для помеченного оператора не допускает по умолчанию: оператор opt . Если бы это было так, то возникла бы грамматическая двусмысленность, если бы вы написали , случай 1: перерыв; — это оператор , принадлежащий default: , или default: не имеет собственного оператора , но сразу за ним следует один.
До сих пор нет сомнений в том, что означает , но, возможно, считалось, что это испортит парсеры людей.
0
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Обязательно, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
IDE0010: добавление отсутствующих случаев в оператор switch — .
NETРедактировать
Твиттер LinkedIn Фейсбук Электронная почта
- Статья
- 2 минуты на чтение
| Собственность | Значение |
|---|---|
| Идентификатор правила | ИДЕ0010 |
| Название | Добавить отсутствующие наблюдения в оператор switch |
| Категория | Стиль |
| Подкатегория | Языковые правила (предпочтения на уровне выражений) |
| Применимые языки | С# и Visual Basic |
Обзор
Это правило касается указания всех отсутствующих случаев переключения для оператор переключения .
Оператор switch считается неполным в следующих сценариях:
- Оператор enum
switch, в котором отсутствуют случаи для одного или нескольких членов перечисления. - Оператор
switchс отсутствующим регистромпо умолчанию.
Параметры
Это правило не имеет связанных параметров стиля кода.
Пример
перечисление E
{
А,
Б
}
класс С
{
// Код с нарушениями
инт М(Е е)
{
// IDE0010: добавить отсутствующие случаи
переключатель (е)
{
случай Е.А:
вернуть 0;
}
возврат -1;
}
// Фиксированный код
инт М(Е е)
{
переключатель (д)
{
случай Е.А:
вернуть 0;
дело Е.Б:
вернуть 1;
по умолчанию:
возврат -1;
}
}
}
Подавить предупреждение
Если вы хотите подавить только одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить, а затем повторно включить правило.