头文件连接

时间:2019-05-06 08:33:54

标签: c++ header-files

头文件如何连接到cpp文件?我有一个cpp文件,包括头文件。我知道include包括什么,但是头文件的cpp文件呢?

让我们说:

calculate.cpp:

#include table.h

.cpp表会怎样?为了完全理解calculate.cpp,是否还需要查看table.cpp?

2 个答案:

答案 0 :(得分:1)

您有文件A.cpp,其中包括B.h。当您编译A.cpp时,预处理器将包含文件B.hA.cpp的转换单元的所有内容,编译器会从中创建一个目标文件。

此时,编译器并不关心B.cpp中任何内容的实现。当编译器编译翻译单元B.cpp时,将单独处理此问题。编译器在这一点上相信,将来(在链接时)从B调用某些内容时,会有一些内容。如果不是这样,您最终将出现链接器错误(很可能是未定义的符号)。

您在这里对所发生的事情有很好的回答:How does the compilation/linking process work?

但是只用更少的词来描述它:

  1. 预处理器:读取您的.cpp和包含的.h文件(例如A.cppB.h,并创建一个输出,供编译器随后进行编译。这也将独立发生B.cpp及其包含/定义)
  2. 编译器:从预处理器获取输出并创建目标文件。目标文件主要包含机器代码和一些链接器信息
  3. 链接器:将目标文件链接在一起,以便在您运行程序时调用它们的正确函数。

因此,我想您正在寻找的连接发生在链接阶段。那是所有零件在一起的地方。

答案 1 :(得分:-2)

从编译器的角度来看没有关系

您可以将整个项目放在一个文件中,该文件可以是.h,并且仍然可以构建和运行它。不推荐,但是您可以做到

拥有.cpp和.h文件的主要原因是在逻辑上将公共接口与内部实现分开。

当我需要使用cpp组件时,我通常只读取.h文件