【发布时间】:2016-05-07 10:34:26
【问题描述】:
我只是觉得它是如何工作的? 这是我第一次看到,位于同一目录“Test1.cpp,Test2.cpp”中的两个 c++ 文件
Test1.cpp:
#include <iostream>
void magic();
int main(){
magic();
return 0;
}
Test2.cpp:
#include <iostream>
using namespace std;
void magic(){
cout << "That's not a magic , it's a logical thing.." << endl;
}
正如我上面提到的,它们在同一个目录中,具有“魔术”功能的原型。 现在我的问题是,如果不包含任何 Test2.cpp,魔术是如何工作的? C++ 默认包含它吗?如果这是真的,那么为什么我们需要包含我们的课程?为什么我们需要头文件而cpp文件可以达到目的?
【问题讨论】:
-
您要查找的过程称为链接。链接使用外部链接标识名称,因此两个文件中的名称
magic指向链接中的同一实体。所有名称都引用已定义(而不仅仅是声明)实体的链接可用于创建可执行程序或库。 -
声明
void magic();告诉编译器将有一个具有此签名的函数 - 稍后在同一文件中或在链接时 - 因此您将能够在代码中使用它。 What is the difference between a definition and a declaration?. -
您可以使用
Test2.h来声明magic,但这已经在Test1.cpp中,在Test1.cpp中不需要它,在Test2.cpp中也不需要它的定义。跨度> -
C++ 没有原型;相反,我们只是说您声明
magic,或者Test1.cpp 包含“magic声明”。术语“原型”用在 C 中,这是一种具有不同规则的不同语言。在这方面,C++ 比 C 更简单。 -
在 Test.cpp void magic();向编译器指示在某处定义了函数魔法。这种依赖将在点赞阶段得到解决。
标签: c++