Как компилятор обнаруживает повторяющиеся определения в единицах перевода

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

Создана ли справочная таблица для учета этого дублирования при связывании каждого из этих TU (во время создания исполняемого файла)?

Любая ссылка по этой теме будет полезна.

Заранее благодарим за объяснение.


person kumar_m_kiran    schedule 28.04.2010    source источник


Ответы (2)


Обычно это обнаруживает компоновщик, а не компилятор. Затем компоновщик может либо объединить переменные (часто требуется для небрежного кодирования C / C ++), либо сообщить об ошибке.

person Paul R    schedule 28.04.2010

Да, компоновщик составляет список неразрешенных внешних ссылок, а затем в конечном итоге пытается разрешить их одну за другой.

person 500 - Internal Server Error    schedule 28.04.2010