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; } } }
Подавить предупреждение
Если вы хотите подавить только одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить, а затем повторно включить правило.