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


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

7 4

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