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