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++ 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 não pode cruzar a definição de ponteiro, masgcc compila-os ok, nada reclamou.

Depois de corrigir o erro, devemos declarar todos os ponteiros antes de qualquer um dosgoto 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++ proibido o útilcauda-goto declaração?

Atualizar:

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

questionAnswers(2)

yourAnswerToTheQuestion