оператор break при использовании фигурных скобок в switch-case - PullRequest
38 голосов
/ 11 сентября 2011

Я использую фигурные скобки со всеми моими операторами регистра переключателей в C / Objective-C / C ++

. Несколько дней назад я не рассматривал вопрос о том, было ли включение оператора break; в фигурные скобки.хорошая или плохая практика.Я подозреваю, что это не имеет значения, но я думаю, что все еще стоит спросить.

    switch (foo) {
        case 1: {
            // stuff
            break;
        }

        default: {
            break;
        }
    }

против

    switch (foo) {
        case 1: {
            // stuff
        } break;

        default: {
            // stuff
        } break;
    }

Ответы [ 5 ]

28 голосов
/ 11 сентября 2011

Краткий ответ: не важно.

10 голосов
/ 26 октября 2011

Просто дать чуть более подробный ответ ...

Официальная спецификация C99 говорит об операторе break следующее:

Оператор break завершает выполнение самого маленького вложенияоператор switch или iteration.

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

5 голосов
/ 11 сентября 2011

Существует множество различных стилей кодирования того, как комбинировать фигурные скобки и переключатели.Я буду использовать тот, который я предпочитаю в примерах.Оператор break выходит из внутреннего цикла или оператора switch независимо от местоположения.Например, вы можете иметь несколько перерывов для одного случая:

switch (foo) {
case 1:
    {
        if (bar)
            break;
        bar = 1;
        ...
    }
    break;
}

Обратите внимание, что вы также можете размещать дела в любом месте, хотя является несколько плохой практикой.Этикетка очень похожа на этикетку goto.Случилось так, что я написал что-то вроде этого:

switch (foo) {
case 1:
    bar = 1;
    if (0) {
case 2:
        bar = 2;
    }
    ...
    break;
}

, но используйте это с осторожностью.

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

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

0 голосов
/ 03 декабря 2013

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

...