Oświadczenie goto nie może przekroczyć definicji zmiennej?

Załóżmy, że kod ten został skompilowanyg++:

#include <stdlib.h>

int main() {
    int a =0;

    goto exit;

    int *b = NULL;

exit:
    return 0;
}

g++ rzuci błędy:

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’

Wygląda na to, żegoto nie może przekraczać definicji wskaźnika, alegcc kompiluje je, nic się nie skarży.

Po naprawieniu błędu musimy zadeklarować wszystkie wskaźniki przed którymkolwiek z nichgoto oświadczenie, to znaczy, że musisz zadeklarować te wskaźniki, nawet jeśli nie potrzebujesz ich w chwili obecnej (i naruszenia niektórych zasad).

Co to za projekt pochodzeniag++ zabronione przydatneogon komunikat?

Aktualizacja:

goto może przekraczać zmienną (dowolny typ zmiennej, nieograniczonej do wskaźnika) deklaracji,ale z wyjątkiem tych, które otrzymały wartość inicjalizacyjną. Jeśli usuniemyNULL zadanie powyżej,g++ milcz teraz. Więc jeśli chcesz zadeklarować zmienne międzygoto-przekrój,nie rób zainicjować je (i nadal naruszać niektóre zasady).

questionAnswers(2)

yourAnswerToTheQuestion