Объявление extern
может использоваться только с глобальными переменными. Он сообщает компилятору, что глобальная переменная определена в другом месте, и просит компоновщика выяснить это.
В вашем коде extern int a
относится к a
, определенному внизу вашего примера. Он мог бы быть одинаково хорошо определен в другой единице перевода.
Как уже отмечали другие, инициализация a
происходит до ввода main()
.