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


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

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

Синтаксис

statement:
labeled-statement
jump-statement

jump-statement:
goto identifier ;

labeled-statement:
identifier : statement

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

Должен jump-statement находиться в той же функции и может отображаться только один оператор в той же функции. identifier Набор имен после goto имени имеет собственное пространство имен, чтобы имена не влияли на другие идентификаторы. Метки не могут быть переопределены. Дополнительные сведения см. в разделе "Пространства имен".

Это хороший стиль программирования для использования breakи continuereturn инструкции goto по возможности. Поскольку оператор 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.

См. также

Отчеты