如果多个.cpp文件是#included会发生什么?

1 c++ include

我看过(和使用过)这样的情况:

在header.h中:

class point
{
public:
    point(xpos, ypos);
    int x;
    int y;
};
Run Code Online (Sandbox Code Playgroud)

在def.cpp中:

#include"header.h"
point::point(xpos, ypos)
{
    x = xpos;
    y = ypos;
}
Run Code Online (Sandbox Code Playgroud)

在main.cpp中:

#include"header.h"
int main()
{
    point p1(5,6);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我知道程序是从main执行的,但编译器如何知道编译.cpp文件的顺序是什么?(特别是如果有多个非主.cpp文件).

Ric*_*dle 10

编译器不关心-它编译每个cpp文件到obj文件和.obj文件都包含缺少的符号列表.所以在这种情况下,main.obj说"我很想念point::point".

然后链接器的工作是获取所有.obj文件,将它们组合成一个可执行文件,并确保每个.obj文件的缺失符号都可以从其他.obj文件中获得 - 因此称为"链接器".

  • 他们不是"通常"任何东西.GCC默认生成.o文件,Visual Studio生成.obj.两者都不比另一个更"平常". (9认同)