Declaração goto não pode cruzar a definição de variáveis?

Suponha que esse código compilado emg++:

#include <stdlib.h>

int main() {
    int a =0;

    goto exit;

    int *b = NULL;

exit:
    return 0;
}

g++&nbsp;irá lançar erros:

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’

Parece que ogoto&nbsp;não pode cruzar a definição de ponteiro, masgcc&nbsp;compila-os ok, nada reclamou.

Depois de corrigir o erro, devemos declarar todos os ponteiros antes de qualquer um dosgoto&nbsp;declaração, isto é, você deve declarar esses ponteiros mesmo que você não precise deles no presente (e violação com alguns princípios).

Qual a consideração de design de origem queg++&nbsp;proibido o útilcauda-goto&nbsp;declaração?

Atualizar:

goto&nbsp;pode cruzar variáveis ​​(qualquer tipo&nbsp;de variável, não limitado a ponteiro) declaração,mas exceto aqueles que obtiveram um valor de inicialização. Se removermos oNULL&nbsp;atribuição acima,g++&nbsp;fique em silêncio agora. Então, se você quiser declarar variáveis ​​entregoto-cross área,não&nbsp;inicializá-los (e ainda violar alguns princípios).