goto, instruction (C++)goto Statement (C++)

Le goto instruction transfère sans condition le contrôle à l’instruction étiquetée par l’identificateur spécifié.The goto statement unconditionally transfers control to the statement labeled by the specified identifier.

SyntaxeSyntax

goto identifier;

NotesRemarks

L'instruction étiquetée indiquée par identifier doit se trouver dans la fonction actuelle.The labeled statement designated by identifier must be in the current function. Tous les noms identifier sont membres d'un espace de noms interne et, par conséquent, n'interfèrent pas avec d'autres identificateurs.All identifier names are members of an internal namespace and therefore do not interfere with other identifiers.

Une étiquette d’instruction est uniquement explicite pour un goto instruction ; sinon, les étiquettes d’instruction sont ignorés.A statement label is meaningful only to a goto statement; otherwise, statement labels are ignored. Les étiquettes ne peuvent pas être redéclarées.Labels cannot be redeclared.

Un goto instruction n’est pas autorisée à transférer le contrôle vers un emplacement qui ignore l’initialisation de n’importe quelle variable qui est dans la portée de cet emplacement.A goto statement is not allowed to transfer control to a location that skips over the initialization of any variable that is in scope in that location. L’exemple suivant déclenche C2362 :The following example raises C2362:

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

    int error_code = 42;

exit:
    return error_code;
}

Il est conseillé d’utiliser le saut, continuer, et retourner instructions au lieu du goto instruction chaque fois que possibles.It is good programming style to use the break, continue, and return statements instead of the goto statement whenever possible. Toutefois, étant donné que le saut instruction se termine à partir d’un seul niveau d’une boucle, vous devrez peut-être utiliser un goto instruction pour quitter une boucle profondément imbriquée.However, because the break statement exits from only one level of a loop, you might have to use a goto statement to exit a deeply nested loop.

Pour plus d’informations sur les étiquettes et la goto instruction, consultez instructions étiquetées.For more information about labels and the goto statement, see Labeled Statements.

ExempleExample

Dans cet exemple, un goto instruction transfère le contrôle au point étiqueté stop lorsque i est égal à 3.In this example, a goto statement transfers control to the point labeled stop when i equals 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

Voir aussiSee also

Instructions de sautJump Statements
Mots clésKeywords