Оператор goto (C++)

Оператор goto безусловно передает управление инструкции, помеченной указанным идентификатором.

Синтаксис

goto identifier;

Замечания

Оператор, метка которого задана в параметре identifier, должен находиться в текущей функции. Все имена, заданные в параметре identifier, являются членами внутреннего пространства имен и, следовательно, не пересекаются с другими идентификаторами.

Метка оператора имеет смысл только для goto оператора. В противном случае метки операторов игнорируются. Повторное объявление меток невозможно.

Оператор goto не может передавать управление в расположение, пропускающее инициализацию любой переменной, которая находится в область в этом расположении. В следующем примере возникает ошибка C2362:

int goto_fn(bool b)
{
    if (!b)
    {
        goto exit;  // C2362
    }
    else
    { /*...*/ }

    int error_code = 42;

exit:
    return error_code;
}

Это хороший стиль программирования для использования breakcontinueоператоров , а return не инструкцийgoto, когда это возможно. Тем не менее, поскольку break оператор выходит из только одного уровня цикла, может потребоваться использовать goto оператор для выхода из глубоко вложенного цикла.

Дополнительные сведения о метках и goto инструкции см. в разделе "Операторы с метками".

Пример

В этом примере goto оператор передает элемент управления в точку, помеченную stopi при значении 3.

// goto_statement.cpp
#include <stdio.h>
int main()
{
    int i, j;

    for ( i = 0; i < 10; i++ )
    {
        printf_s( "Outer loop executing. i = %d\n", i );
        for ( j = 0; j < 2; j++ )
        {
            printf_s( " Inner loop executing. j = %d\n", j );
            if ( i == 3 )
                goto stop;
        }
    }

    // This message does not print:
    printf_s( "Loop exited. i = %d\n", i );

    stop:
    printf_s( "Jumped to stop. i = %d\n", i );
}
Outer loop executing. i = 0
Inner loop executing. j = 0
Inner loop executing. j = 1
Outer loop executing. i = 1
Inner loop executing. j = 0
Inner loop executing. j = 1
Outer loop executing. i = 2
Inner loop executing. j = 0
Inner loop executing. j = 1
Outer loop executing. i = 3
Inner loop executing. j = 0
Jumped to stop. i = 3

См. также

Операторы перехода
Ключевые слова