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

发布于 2024-08-31 07:32:26 字数 229 浏览 5 评论 0原文

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

是否有参考表创建以在链接每个 TU 时考虑这些重复(在创建​​可执行文件期间)?

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

预先感谢您的解释。

How does a compiler detect duplicate definition across translation unit. Suppose there were a extern const variable declaration in an header file.
If this header file was used in more than one translation unit - each having a separate definition - each TU object creation would be successful, however when the final executable is created the error is thrown.

Is there a reference table created to account these duplication while linking each of these TU (during the creation of the executable)?

Any link on this topic would be helpful.

Thanks in advance for your explanation.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

踏月而来 2024-09-07 07:32:26

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

Normally this would be detected by the linker, rather than the compiler. The linker can then either coalesce the variables (often required for sloppy C/C++ coding) or report an error.

两个我 2024-09-07 07:32:26

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

Yes, the linker builds a list of unresolved external references and then eventually goes on to attempt to resolve them one by one.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文