我是一名 C++ 学习者,我遇到了将代码分成多个文件以加快大型项目的编译过程的概念。

然而,这本书没有告诉我什么,我试图在其他书籍和网络上找到它,但没有运气的是链接器(在编译期间)如何知道要包含哪些文件。

当我创建新文件时,我使用 #include "newfile.h" 将其 header 连接到主文件,但是在这个 header 中我没有写在哪里可以找到函数的定义。

所以我如何想象这个过程是它从主文件开始,并在那里找到与其他文件的“连接”。问题是它如何找到那些据我所知不需要与其头文件命名相同的 .cpp 文件。

示例:

主文件:

#include <iostream>
#include "krneki_H.h"

using namespace std;


int main()
{
 krneki1();
 krneki2();
 krneki3();
}

和头文件:
void krneki1();
void krneki2();
void krneki3();

和新的 .cpp 文件:
#include <iostream>
#include "krneki_H.h"

using namespace std;

void krneki1() {
cout<<"Krneki1"<<endl;}

void krneki2() {
cout<<"Krneki2"<<endl;}

void krneki3() {
cout<<"Krneki3"<<endl;}

请注意,没有使用第二个 cpp 文件的指示。它只知道使用它。它会搜索 map 中的所有 .cpp 文件吗?

谢谢你的答案。

最佳答案

不,它不只是知道使用它。在您的示例中,如果您使用 main.cpp 进行编译并且没有那个新的 cpp 文件,您将收到“ undefined reference ”错误。

发生的情况是您正在使用一个自动编译所有 cpp 文件的花哨的 IDE。它默认将它们全部包含在您的 makefile 中。

我建议您尝试从头开始设计一个 makefile,并亲眼看看如果您不包含具有函数实现的 cpp 文件,您将如何获得“ undefined reference ”错误。

10-06 13:40
查看更多