Statement-Goto kann die Variablendefinition nicht kreuzen?

Nehme an, dieser code kompiliert in g++:

#include <stdlib.h>

int main() {
    int a =0;

    goto exit;

    int *b = NULL;

exit:
    return 0;
}

g++ werfen 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’

Wie es scheint, dass die goto nicht überqueren können Zeiger-definition, aber gcc stellt Sie ok, nichts beschwert.

Nachdem Sie den Fehler behoben haben, müssen wir deklarieren alle Hinweise, bevor die goto - Anweisung, das heißt, Sie müssen erklären Sie diese Hinweise, auch wenn Sie nicht müssen Sie auf die Gegenwart (und die Verletzung mit einigen Prinzipien).

Was die Herkunft design-überlegung, dass g++ verboten, die nützlich Schwanz-springen Aussage?


Update:

goto können cross-variable (jede Art der Variablen nicht beschränkt auf pointer) Deklaration aber außer denen hat, dass eine Initialisierung mit dem Wert. Wenn wir entfernen Sie die NULL Zuordnung oben g++ schweigen jetzt. Also, wenn Sie wollen, um Variablen zu deklarieren, die zwischen goto-cross-Bereich, nicht initialisieren Sie diese (und noch gegen einige Prinzipien).

InformationsquelleAutor der Frage coanor | 2013-01-11

Schreibe einen Kommentar