Разное

Statement missing c: if statement missing ) — C / C++

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 . Если бы это было так, то возникла бы грамматическая двусмысленность, если бы вы написали

default : case 1: break; , случай 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;
        }
    }
}
 

Подавить предупреждение

Если вы хотите подавить только одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить, а затем повторно включить правило.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *