Supponiamo questi codice compilato in g++
:L'istruzione goto non può attraversare la definizione della variabile?
#include <stdlib.h>
int main() {
int a =0;
goto exit;
int *b = NULL;
exit:
return 0;
}
g++
getteranno errori:
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’
Sembra che la goto
non può croce definizione puntatore, ma gcc
compila loro ok, niente lamentato.
Dopo aver corretto l'errore, è necessario dichiarare tutti i puntatori prima di qualsiasi delle istruzioni goto
, vale a dire che è necessario dichiarare questi puntatori anche se non sono necessari al momento (e violazione con alcuni principi).
Quale motivo per cui il disegno di origine considera che g++
è vietato l'utile istruzione tail-goto?
Aggiornamento:
goto
può attraversare variabile (qualsiasi tipo di variabili, non limitato a puntatore) dichiarazione, ma ad eccezione di quelli che ha ottenuto un valore di inizializzazione. Se togliamo l'incarico NULL
in precedenza, g++
taci. Quindi, se si desidera dichiarare variabili che tra goto
-cross-area, non sono inizializzarle (e comunque violare alcuni principi).