Подтвердить что ты не робот

C Прямоугольные фигурные скобки после каждого случая

В управлении потоком C switch-case для

необходимо установить фигурные скобки {} после case, если в этом блоке определены переменные.

Неправильно ли использовать фигурные скобки после каждого case, независимо от объявления переменной?

Например:

switch(i) {
  case 1: {
    int j = 4;
    ...code...
  } break;

  case 2: {  //No variable being declared! Brace OK?
    ...code...
  } break;
}
4b9b3361

Ответ 1

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

При этом, вероятно, не рекомендуется объявлять переменные внутри блоков case в прямой C. Хотя это может быть разрешено вашим компилятором, возможно, это более чистое решение. Взаимно исключающие блоки могут иметь возможность использовать несколько общих временных переменных, или вы можете обнаружить, что ваши блоки case будут работать лучше как вспомогательные функции.

Ответ 2

Брекеты могут использоваться в каждом случае без каких-либо ограничений скорости, из-за того, как компиляторы оптимизируют код. Так что это просто стиль и предпочтение кодера.

  • Наиболее предпочтительным использованием не является использование фигурных скобок, хотя их использование в каждом случае во время активной разработки может быть легче найти некоторые дополнения в коде. Время от времени.

  • Это просто восточность; потому что оператор "case" не нуждается только в одной команде, но будет проходить через код, поскольку он работает как метка. Поэтому блоки не нужны и не являются недопустимыми.

  • В случае с переменными; скобки используются в любом случае, для создания контекстов для переменных, и имеет смысл использовать их. Некоторые компиляторы на разных платформах показывают разные типы поведения, если они не включены.

Ответ 3

Как правило, это неудачная практика перепрыгивает через инициализацию переменной, будь то с goto или switch. Это то, что происходит, когда у вас нет блоков на case.

В C99 есть даже случай, когда переключение на инициализацию является незаконным, а именно массивы переменной длины. Они должны быть "построены" так же, как не-POD в С++, их инициализация необходима для доступа к переменной позже. Поэтому в этом случае вы должны использовать оператор блока.

Ответ 4

Я считаю, что плохой стиль использовать фигурные скобки в каждом case. Случаи - это метки в C, похожие на метки goto. И на текущем языке C вы можете объявлять переменные в каждом case (или где угодно), не вводя новые блоки, хотя некоторые люди (включая меня) также считают этот плохой стиль.

Ответ 5

Просто чтобы добавить небольшую точку, многие редакторы и IDE разрешают сбрасывать блоки и/или автоматически отступать, а некоторые позволяют вам перейти к соответствующей фигурной скобе - я лично не знаю никого, что позволит вам перейти от перерыва к оператору соответствия.

При отладке или повторном факторинге другие люди (или даже ваши собственные через несколько месяцев), код, который содержит сложные заявления о случаях, способно как свернуть разделы кода, так и перейти к соответствующим случаям, неоценим, особенно если код содержит изменения отступов.

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