如何链接标题和翻译文件?

时间:2013-10-24 11:53:07

标签: c++

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

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

2 个答案:

答案 0 :(得分:1)

编译器不知道定义的位置。

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

答案 1 :(得分:-1)

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


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

如果你正在使用GCC,你可以在编译文件时使用-E选项,告诉GCC在预处理阶段之后停止,这样你就可以自己看到这个文件了。

为了使编译器知道特定声明所在的文件和源行,预处理器输出所谓的“行”指令。这些是编译器识别并用于设置当前文件名和行号的特殊指令(与预处理程序指令非常相似)。参见例如this part from the GCC manual