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).