Anweisung gehen kann nicht Variablendefinition kreuzen?
Angenommen, dieser Code wurde in kompiliertg++
:
#include <stdlib.h>
int main() {
int a =0;
goto exit;
int *b = NULL;
exit:
return 0;
}
g++
wirft Fehler:
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’
Es scheint, dass diegoto
kann Zeigerdefinition nicht kreuzen, abergcc
kompiliert sie ok, nichts beschwert sich.
Nachdem der Fehler behoben wurde, müssen wir alle Zeiger vor einem der Fehler deklarierengoto
Aussage, das heißt, Sie müssen diese Zeiger deklarieren, obwohl Sie sie derzeit nicht benötigen (und gegen einige Prinzipien verstoßen).
Was das Ursprungsdesign berücksichtigtg++
das Nützliche verbotenSchwanz-goto Aussage?
Aktualisieren:
goto
kann variabel kreuzen (jeder Typ der Variablen, nicht auf Zeiger beschränkt) Deklaration,aber mit Ausnahme derer, die einen Initialisierungswert haben. Wenn wir das entfernenNULL
abtretung oben,g++
Schweig jetzt. Wenn Sie also Variablen deklarieren möchten, die zwischengoto
-übergreifend,unterlassen Sie Initialisieren Sie sie (und verletzen Sie trotzdem einige Prinzipien).