Заявление goto не может пересекать определение переменной?

Предположим, что этот код скомпилирован вg++:

#include <stdlib.h>

int main() {
    int a =0;

    goto exit;

    int *b = NULL;

exit:
    return 0;
}

g++ скину ошибки:

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’

Кажется, чтоgoto не может пересечь определение указателя, ноgcc компилирует их нормально, ничего не жаловалось.

После исправления ошибки мы должны объявить все указатели до того, какgoto утверждение, то есть вы должны объявить эти указатели, даже если они вам не нужны в настоящее время (и нарушают некоторые принципы).

Каково исходное соображение дизайна?g++ запрещено полезноеХвост-гото заявление?

Обновить:

goto может пересекать переменную (любой тип объявления переменной, не ограничиваясь указателем),но кроме тех, которые получили значение инициализации, Если мы удалимNULL задание выше,g++ молчи сейчас. Так что, если вы хотите объявить переменные, которые междуgoto-cross-область,не надо инициализировать их (и все же нарушать некоторые принципы).

Ответы на вопрос(2)

Ваш ответ на вопрос