В момент вызова printf
имя a
относится ко второй переменной с этим именем, той, которая инициализирована как 20
. Внешний a
, инициализированный как 10
, скрыт. Нет причин для printf
печатать 10
.
Оператор goto
пропускает инициализацию внутреннего a
, поэтому он никогда не инициализируется 20
. Под него выделено место, но его значение - произвольная фигня. Напечатанный 0
- это содержимое внутреннего a
. Это могло быть что угодно.