例如,我有一个Foo类。我创建Foo.h
,Foo.cpp
,然后在Foo.h
文件中加入main.cpp
。当我编译代码时,机器如何知道关联类头文件和类cpp文件?它是由文件名完成的吗?
我真的很想了解这个编译和链接的过程。
答案 0 :(得分:4)
当我编译代码时,机器如何知道如何关联类头文件和类cpp文件?它是通过文件名来做的吗?
不,编译器没有这种自动关联。
如果你有一个包含函数和类的所有声明的头文件,它必须是#included
来自任何使用它的翻译单元(.cpp
文件)。
(声明合同的)步骤由c预处理器完成,其中#include "MyDeclarations.hpp"
的每次出现都将替换为翻译单元中MyDeclarations.hpp
的完整文件内容。
一个简单的例子:
<强> Foo.hpp 强>
class Foo {
public:
Foo(); // Constructor declaration
};
<强> Foo.cpp中强>
#include "Foo.hpp" // <<<< Include declarations
Foo::Foo() {} // Constructor definition
<强>的main.cpp 强>
#include "Foo.hpp" // <<<< Include declarations
int main() {
Foo foo; // <<<<< Use declarations
}
要最终指示链接器将所有这些文件放在一起,您必须引用从转换单元生成的工件。取决于工具链,但是例如GCC你可以使用一些编译器命令行,如
$ g++ main.cpp Foo.cpp -o myProg