编译器如何检测跨翻译单元的重复定义

时间:2010-04-28 17:47:54

标签: compiler-theory

编译器如何检测翻译单元的重复定义。假设头文件中有一个extern const变量声明。
如果此头文件用于多个转换单元 - 每个转换单元都有一个单独的定义 - 每个TU对象创建都会成功,但是当创建最终可执行文件时,会抛出错误。

在链接每个TU时(在创建可执行文件期间)是否创建了用于计算这些重复的参考表?

有关此主题的任何链接都会有所帮助。

提前感谢您的解释。

2 个答案:

答案 0 :(得分:0)

是的,链接器构建了一个未解析的外部引用列表,然后最终继续尝试逐个解析它们。

答案 1 :(得分:0)

通常,这将由链接器检测,而不是编译器。然后链接器可以合并变量(通常是草率的C / C ++编码所需)或报告错误。