Должен признаться - однажды gcc сделал так: модуль main.c
int a;
модуль mod1.c
int a;
И это была одна и та же переменная, extern не требовался.
Спросил на одном форуме - а мне говорят "это стандарт".
Не верю. Обоим не верю.
---
Делаю как всегда и всё работает правильно.