Прыжки из сферы - PullRequest
       51

Прыжки из сферы

0 голосов
/ 02 сентября 2018

Можно ли прыгнуть из безымянной области?

void MyFunc() {
    {
        ... // Code

        if (!head_size) {
            goto _common_error; // <- break and continue don't work here
        }

        ... // Code

        if (!tail_size) {
            goto _common_error; // second time
        }

        ... // Code
    }

    _common_error:
    {
        ... // Code
    }
}

Мой вопрос не в том, может ли это быть переработано, а в том, есть ли хитрость в c ++, которую я не знаю.

Есть ли в c ++ механизм, отличный от goto, для выхода из безымянной области? перерыв и продолжение не работают в прицеле.

Update1: изменено пространство имен слова в область действия

1 Ответ

0 голосов
/ 02 сентября 2018

Да, вам нужно использовать goto, чтобы выпрыгнуть из области видимости.

break может использоваться только для выхода из цикла или переключателя.

Но вы можете использовать (сомнительный) трюк, используя фиктивный цикл:

void MyFunc() {
    do {
        ... // Code

        if (!head_size) {
            break;
        }

        ... // Code

        if (!tail_size) {
            break;
        }

        ... // Code
    } while (false);

    {
        ... // Error handling code
    }
}
...