【问题标题】:How does the compiler detect duplicate definition across translation units编译器如何跨翻译单元检测重复定义
【发布时间】:2010-04-29 02:30:11
【问题描述】:

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

在链接每个 TU 时(在创建可执行文件期间)是否创建了一个参考表来说明这些重复?

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

提前感谢您的解释。

【问题讨论】:

    标签: compiler-theory


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多