C Синтаксический Вопрос
Считается ли неправильным кодирование, чтобы поставить разрыв в части по умолчанию оператора switch? В книге, которую я читал, говорилось, что она необязательна, но учитель отсчитывал за ее использование.
7 ответов:
Лучше всего всегда использовать
break
, если вы не хотите, чтобы управление перешло в другой случай, даже в конце коммутатора.
Это зависит от того, есть ли он в начале или в конце оператора switch. Если есть другие
case
s после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
после всех операторов case. Что, если позже к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 это действительно произошло в проекте, над которым я работал, и он взял нас [sic! мы: вся команда проекта] весь день, чтобы найти ошибку
; мы искали везде и всюду за исключением блок выключателей.
Это не обязательно, если по умолчанию используется последний случай.
Если в один прекрасный день вы решите перенести последнее дело в другое место, это может спасти вас от некоторых ошибок, если был перерыв.
Остальное-дело вкуса. Это неплохое кодирование.
Ветвь
Однако, если кто-то решит изменить порядокdefault
должнавсегда быть последним случаем в блокеswitch
, поэтому сbreak
или безbreak
выполнение продолжается послеswitch
. Так частоbreak
там не используется, потому что это лишнее.case
s, существование или отсутствиеbreak
может иметь огромное значение. Но опять же, перемещение делаdefault
перед другим было бы серьезной ошибкой само по себе.