Поделиться через


goto и помеченные операторы (C)

Оператор goto передает управление метке. Данная метка должна находиться в той же функции и может присутствовать только перед одним ее оператором.

Синтаксис

  • оператор:
    оператор-с-меткой

    оператор-перехода

  • оператор-перехода:
    goto идентификатор ;

  • оператор-с-меткой:
    идентификатор : оператор

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

Оператор-перехода должен находиться в той же функции и может присутствовать только перед одним ее оператором. Набор имен идентификаторов после оператора goto имеет свое собственное пространство имен, поэтому эти имена не конфликтуют с другими идентификаторами. Повторное объявление меток невозможно. Дополнительные сведения см. в разделе Пространства имен.

Рекомендуется всегда, когда это возможно, вместо оператора goto использовать операторы break, continue и return. Поскольку оператор break обеспечивает выход только из одного уровня цикла, для выхода из глубоко вложенного цикла может потребоваться оператор goto.

В следующем примере показано использование оператора goto.

// goto.c
#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 < 3; j++ )
        {
            printf_s( " Inner loop executing. j = %d\n", j );
            if ( i == 5 )
                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 );
}

В этом примере оператор goto передает управление в точку с меткой stop, когда значение переменной i равно 5.

См. также

Основные понятия

Операторы (C)