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

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

4 голосов
/ 20 сентября 2011

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

Ответы [ 7 ]

15 голосов
/ 20 сентября 2011

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

8 голосов
/ 20 сентября 2011

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

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

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

    case 2:
        printf("2\n");
        break;
}
5 голосов
/ 20 сентября 2011

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

Это правда, что настоящих причин не ставить 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?
}

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

3 голосов
/ 20 сентября 2011

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

2 голосов
/ 20 сентября 2011

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

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

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

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

1 голос
/ 20 сентября 2011

Нет необходимости, если по умолчанию это последний случай.

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

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

0 голосов
/ 20 сентября 2011

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

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

...