即使缺少函数定义,编译也是成功的

时间:2016-08-26 10:51:44

标签: c++ visual-studio compilation include c-preprocessor

我从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:我可以以某种方式调试编译过程,以便我可以看到发生了什么吗?

1 个答案:

答案 0 :(得分:2)

编译器需要知道定义。这是联系人的工作。

相关问题