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

Выражение "break" при использовании фигурных скобок в корпусе переключателя

Я использую фигурные скобки со всеми моими операциями case switch в C/ Objective-C/С++

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

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

        default: {
            break;
        }
    }

против

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

        default: {
            // stuff
        } break;
    }
4b9b3361

Ответ 1

Короткий ответ: это не имеет значения.

Ответ 2

Просто дайте немного более подробный ответ...

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

Оператор break прекращает выполнение самого маленького закрывающего переключателя или оператора итерации.

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

Ответ 3

Там тонны различных стилей кодирования, как объединить фигурные скобки и переключатели. Я буду использовать тот, который я предпочитаю в примерах. Оператор 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;
}

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

Ответ 4

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

Ответ 5

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