Один из модулей компиляции должен определить переменную как глобальную переменную.При компиляции этого файла память выделяется для переменной в сегменте данных, аналогично переменным области видимости файла.Разница в том, что переменная зарегистрирована в таблице связей, чтобы другие объектные файлы могли ее найти.
Все остальные модули компиляции объявляют ее с помощью ключевого слова extern
.Это предотвращает выделение памяти для переменной и организует компоновщик для поиска внешней переменной.
Когда вы связываете все объектные файлы вместе, компоновщик находит все объектные файлы, которые имеют внешнюю ссылку напеременной и соединяет эту ссылку с памятью, выделенной в первом объектном файле.