В чем суть вопроса. Есть два модуля, в них определена глобальная переменная x:
foo.c:
int x;
bar.c:
int x;
Что будет? Чтобы понять, необходимо обратиться к ISO, пункт 6.2.2 Linkages of identifiers.
п.2:
In the set of translation units and libraries that constitutes an entire program, each declaration of a particular identifier with
external linkage denotes the same object or function. Within one translation unit, each declaration of an identifier with internal
linkage denotes the same object or function.
Иными словами, если глобальная переменная указана как external linkage (ключевое слово external), она определена во всех этих модулях. При internal linkage (ключевое слово static) - только в том модуле, в котором описана.
А если ключевое слово не указано? Снова смотрим в стандарт, п. 5:
If the declaration of an identifier for an object has file scope and no storage-class specifier, its linkage is external.
Я думаю, теперь можно и не отвечать, что будет, это очевидно ;) Ошибка исключительно новичка, но не специалиста с 7-летним стажем.