我从this问题借用了例子。有以下文件:
的main.cpp
#include <iostream>
#include "foop.h"
int main(int argc, char *argv[])
{
int x=42;
std::cout << x <<std::endl;
std::cout << foo(x) << std::endl;
return 0;
}
foop.h
#ifndef FOOP_H
#define FOOP_H
int foo(int a);
#endif
foop.cpp
int foo(int a){
return ++a;
}
正如您所看到的,main.cpp
包含foop.h
,但foop.h
仅包含声明,而不包含函数foo
的定义。 main.cpp
如何知道foop.cpp
的存在以及foo
函数的定义?我的第一个猜测是,如果*.h
的名称与*.cpp
的名称相同,那么它会以某种方式神奇地起作用,但当我将foop.cpp
重命名为foop2.cpp
时它也有效
PS:我将文件保存在一个项目中,位于Visual Studio内的同一目录下
PPS:我可以以某种方式调试编译过程,以便我可以看到发生了什么吗?
答案 0 :(得分:2)
编译器不需要知道定义。这是联系人的工作。