编译器如何检测跨翻译单元的重复定义。假设头文件中有一个extern const变量声明。
如果在多个翻译单元中使用此头文件(每个翻译单元具有单独的定义),则每个TU对象的创建都会成功,但是当创建最终可执行文件时会抛出错误。
编译器如何检测跨翻译单元的重复定义
是否有一个参考表是为了在链接这些TU(在创建可执行文件的过程中)链接这些重复项时创建的?
有关此主题的任何链接都会有所帮助。
在此先感谢您的解释。
编译器如何检测跨翻译单元的重复定义。假设头文件中有一个extern const变量声明。
如果在多个翻译单元中使用此头文件(每个翻译单元具有单独的定义),则每个TU对象的创建都会成功,但是当创建最终可执行文件时会抛出错误。
编译器如何检测跨翻译单元的重复定义
是否有一个参考表是为了在链接这些TU(在创建可执行文件的过程中)链接这些重复项时创建的?
有关此主题的任何链接都会有所帮助。
在此先感谢您的解释。
通常这将由链接器而不是编译器检测到。然后链接器可以合并变量(通常需要马虎C/C++编码)或报告错误。
是的,链接器建立一个未解析的外部引用列表,然后最终尝试逐一解决它们。