Goto declaración no puede cruzar definición de variable?

Supongamos que estos códigos compilados eng++:

#include <stdlib.h>

int main() {
    int a =0;

    goto exit;

    int *b = NULL;

exit:
    return 0;
}

g++ tirará errores:

goto_test.c:10:1: error: jump to label ‘exit’ [-fpermissive]
goto_test.c:6:10: error:   from here [-fpermissive]
goto_test.c:8:10: error:   crosses initialization of ‘int* b’

Parece que lagoto no se puede cruzar la definición del puntero, perogcc Los compila ok, nada se quejó.

Después de corregir el error, debemos declarar todos los punteros antes de cualquiera de losgoto declaración, es decir, debe declarar estos indicadores a pesar de que no los necesita en el presente (y la violación con algunos principios).

Lo que el diseño de origen considera queg++ prohibido lo utilcola-goto ¿declaración?

Actualizar:

goto puede cruzar variable (cualquier tipo de variable, no limitado a puntero) declaración,pero excepto los que obtuvieron un valor de inicialización. Si eliminamos elNULL tarea anterior,g++ calla ahora Así que si quieres declarar variables que entregoto-a través del área,no haga Inicialízalos (y aún violando algunos principios).

Respuestas a la pregunta(2)

Su respuesta a la pregunta