Как компилятор обнаруживает повторяющиеся определения в единицах перевода - PullRequest
1 голос
/ 28 апреля 2010

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

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

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

Заранее спасибо за ваше объяснение.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2010

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

0 голосов
/ 28 апреля 2010

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

...