Меня терзают смутные сомнения... Обычно .h-файлы с интерфейсом модуля (в котором будет наш extern const int x;) включают и в сам модуль (в котором будет наш int x;). Проверять лень, а сообразить не могу, будет ли в этом случае ошибка как при несовпадении между объявлением и определением функции? Или с переменными по другому - та, которая extern считается как другая переменная, а в области видимости модуля будет своя (int x;) ???
И еще есть неясный момент - при линковке. Глобальные переменные, объявленные через const могут размещаться в другой области памяти (например во Flash), а в гарвардовской архитектуре для доступа к ним могут использоваться другие инструкции. В таком случае для гарварда это будут действительно разные переменные. И линкер ругнется, что нет переменной const int x;