Ничего, но речь же про нормальное программирование, а не какие-то приседания с костылями? Таких переменных много, в готовом коде (C-библиотека), для начала. И у тебя в каждом объектном файле есть глобальные переменные, глобальные статические, статические в функциях. И при раздельной компиляции двух модулей можно либо: 1) научить линкер их размещать по разным адресам (заранее определить кому какой диапазон), 2) научиться линковаться в динамике (загружать ELF), 3) костыли типа предложенных тобой. Вариант 1 не очень хорош, ибо решает проблему только наполовину. Нужно ещё и символы из соседнего модуля видеть (можно руками сделать таблицы функций). Потом ещё проблема C-стартапа, где настраивается стек (и вообще тот факт, что этот стартап нужно вызвать у обоих модулей, ибо в нём происходит и инициализация переменных к слову). Потом в каждом модуле окажется своя C-библиотека (дублирование кода).
[ZX]