goto (Instrucción) (C++)

La instrucción goto transfiere incondicionalmente el control a la instrucción etiquetada por el identificador especificado.

Sintaxis

goto identifier;

Comentarios

La instrucción con etiqueta designada por identifier debe estar en la función actual. Todos los nombres de identifier son miembros de un espacio de nombres interno y, por tanto, no interfieren con otros identificadores.

Una etiqueta de instrucción solo es significativa para una instrucción goto; de lo contrario, se omiten las etiquetas de instrucciones. Las etiquetas no se pueden volver a declarar.

No se permite que una instrucción goto transfiera el control a una ubicación que omita la inicialización de cualquier variable que esté en el ámbito de esa ubicación. En el ejemplo siguiente se produce el error C2362:

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

    int error_code = 42;

exit:
    return error_code;
}

Una buena recomendación de programación es utilizar las instrucciones break, continue y return en lugar de la instrucción goto siempre que sea posible. Sin embargo, puesto que la instrucción break sale de un solo nivel de un bucle, puede que tenga que utilizar una instrucción goto para salir de un bucle anidado profundamente.

Para más información sobre las etiquetas y la instrucción goto, consulte Instrucciones con etiquetas.

Ejemplo

En este ejemplo, una instrucción goto transfiere el control al punto con la etiqueta stop cuando i es igual a 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

Consulte también

Instrucciones de salto
Palabras clave