编译器如何检测翻译单元的重复定义。假设头文件中有一个extern const变量声明。
如果此头文件用于多个转换单元 - 每个转换单元都有一个单独的定义 - 每个TU对象创建都会成功,但是当创建最终可执行文件时,会抛出错误。
在链接每个TU时(在创建可执行文件期间)是否创建了用于计算这些重复的参考表?
有关此主题的任何链接都会有所帮助。
提前感谢您的解释。
答案 0 :(得分:0)
是的,链接器构建了一个未解析的外部引用列表,然后最终继续尝试逐个解析它们。
答案 1 :(得分:0)
通常,这将由链接器检测,而不是编译器。然后链接器可以合并变量(通常是草率的C / C ++编码所需)或报告错误。