C Синтаксис Вопрос

Считается ли плохим кодированием ставить разрыв в части по умолчанию оператора switch? В книге, которую я читал, говорилось, что она не обязательна, но учитель рассчитывал на ее использование.

7 ответов

Решение

Лучшая практика - всегда использовать break если только вы не хотите, чтобы контроль перетек в другой корпус, даже в конце коммутатора.

Это зависит от того, есть ли оно в начале или в конце оператора switch. Если есть другие caseс после default тогда вы, вероятно, хотите break там, если вы действительно не хотите провалиться.

switch (a)
{
    case 0:
    default:
        printf("Default\n");
        break;

    case 1:
        printf("1\n");
        break;

    case 2:
        printf("2\n");
        break;
}

Учитель был крайне педантичным, наказывая учеников за то, что они помещали что-то в исходный код, что не имеет никакого значения

Это правда, что нет реальной причины ставить break в таком заявлении:

switch(i) {
   case 0:
      // whatever
      break;
   default:
      // whatever
}

Но:

Это хорошая идея, чтобы положить break после всех случаев заявления. Что делать, если позднее к switch?

switch(i) {
   case 0:
      // whatever
      break;
   default:
      // whatever
   case 1:
      // OOPS! Is the missing break above intentional or a mistake?
}

Даже если кто-то утверждает, что этого никогда не должно произойти (что весьма убедительно сказать ИМХО), вы должны спросить своего учителя, почему он рассчитывал на это, а не, например, на использование лишних пробелов в источнике. В конце концов, пробелы также не меняют смысла программы.

Я работал в местах, где break требовался в каждом случае переключения, включая случай по умолчанию. Ваш учитель объяснил, почему он или она пометили это неправильно?

Я согласен со всеми остальными: нет необходимости, если default следует за финалом case, Но я всегда вставляю это в любом случае, потому что я (или, что еще хуже, другой бедный скот) мог бы случайно добавить еще один case после дефолта шесть месяцев в будущем. Конечно, это будет ошибка, но только ошибка ввода: почему я должен оставлять код уязвимым для трудно обнаруживаемой ошибки1 только потому, что я совершил какую-то тупую ошибку с полуночи? Кому нужно такое горе?

Примечание для инструктора: вставка break в этом случае пример защитного кода, который всегда очень полезен.

Примечание для ученика: скрежетать зубами, гримасничать и стонать, пить пиво и двигаться дальше, всегда помня избегать этого инструктора в следующем семестре.

1 Это действительно произошло в проекте, в котором я участвовал, и это заняло у нас [так! мы: вся команда проекта] весь день, чтобы найти ошибку опечатки; мы смотрели везде, кроме блока выключателей.

Нет необходимости, если регистр по умолчанию является последним.

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

Остальное дело вкуса. Это не плохое кодирование.

default ветвь всегда должна быть последним случаем в switch блок, так с или без breakвыполнение продолжается после switch, Так часто break не используется там, потому что это лишнее.

Однако, если кто-то решит изменить порядок caseс, наличие или отсутствие break может иметь огромное значение. Но опять же, двигая default дело перед другим было бы серьезной ошибкой само по себе.

Другие вопросы по тегам