Udostępnij za pośrednictwem


goto i instrukcje oznaczone etykietami (C)

Instrukcja goto przenosi kontrolkę do etykiety. Dana etykieta musi znajdować się w tej samej funkcji i może być wyświetlana przed tylko jedną instrukcją w tej samej funkcji.

Składnia

statement:
labeled-statement
jump-statement

jump-statement:
goto identifier ;

labeled-statement:
identifier : statement

Etykieta instrukcji jest zrozumiała tylko dla goto instrukcji. W każdym innym kontekście instrukcja oznaczona etykietą jest wykonywana bez względu na etykietę.

Element jump-statement musi znajdować się w tej samej funkcji i może występować przed tylko jedną instrukcją w tej samej funkcji. Zestaw identifier nazw po obiekcie ma własną goto przestrzeń nazw, więc nazwy nie zakłócają innych identyfikatorów. Nie można ponownie deklarować etykiet. Aby uzyskać więcej informacji, zobacz Przestrzenie nazw.

Dobrym stylem programowania jest użycie breakinstrukcji , continuei return w preferencjach, jeśli goto jest to możliwe. break Ponieważ instrukcja kończy się tylko z jednego poziomu pętli, goto może być konieczne wyjście pętli z głęboko zagnieżdżonej pętli.

W tym przykładzie pokazano instrukcję 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 );
}

W tym przykładzie instrukcja przenosi kontrolkę goto do punktu oznaczonego stop etykietą , gdy i równa się 5.

Zobacz też

Zestawienia