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
дело перед другим было бы серьезной ошибкой само по себе.