如何链接标题和翻译文件

How to link a header and a translation file?

本文关键字:标题 翻译 文件 链接 何链接      更新时间:2023-10-16

C++编译器如何知道它可以在哪个翻译单元或源文件中找到标头中的声明?我的意思是,标头中各种声明的实现可以在多个文件中,对吧?那么编译器如何知道要选择哪一个呢?

而且,当使用外部变量时,编译器如何知道它是在哪个文件中定义的?

编译器不知道在哪里找到定义。

链接器是查看已编译对象的工具,并将包含标头的对象与包含函数或外部变量实现的对象/库链接在一起。链接器将它应该汇集在一起的对象文件和库的列表以及它应该查找的对象文件和库的列表作为输入。

由于原始问题的术语,我误解了这个问题,所以这个答案实际上并没有回答这个问题。但是,我将把它留在这里,以供将来参考预处理器。


预处理器的 #include 指令可以看作是在源文件中#include指令所在的位置创建一个临时文件,其中包含所有标头的内容。

如果您使用的是 GCC,则可以在编译文件时使用 -E 选项,告诉 GCC 在预处理阶段后停止,以便您可以自己查看此文件。

为了使编译器知道特定声明位于哪个文件和源代码行上,预处理器输出所谓的"line"指令。这些是编译器识别并用于设置当前文件名和行号的特殊指令(与预处理器指令非常相似)。例如,请参阅GCC手册中的这一部分。