Потому что неопределенное поведение == все может случиться. Вам не повезло, что это не сбой, такое поведение может потенциально скрывать ошибки.
Что касается a, определяющего дважды - это ошибка в компиляторе.
a