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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage