- 在我的
first.cpp
我放#include second.h
.
结果first.cpp
看到 的内容second.cpp
。 - 在
second.cpp
我放#include third.h
.
我的问题是:会first.cpp
看到内容third.cpp
吗?
添加
我认为如果我包含 second.h,我将能够使用在 second.h 中声明并在 second.cpp 中描述(定义、编写)的函数。从这个意义上说, second.cpp 的内容对 first.cpp 可用
first.cpp
我放#include second.h
. first.cpp
看到 的内容second.cpp
。second.cpp
我放#include third.h
.我的问题是:会first.cpp
看到内容third.cpp
吗?
添加
我认为如果我包含 second.h,我将能够使用在 second.h 中声明并在 second.cpp 中描述(定义、编写)的函数。从这个意义上说, second.cpp 的内容对 first.cpp 可用
您可以将#include
其视为简单的文本插入。但是,如果您包括second.h
您“看到”second.h
而不是second.cpp
.
当使用#include
该文件的实际文件内容时,该文件的内容将作为编译器输入的一部分出现。这意味着first.cpp
在编译器看来,它就好像它有second.h
并且third.h
在它里面一样。second.cpp
和中的源代码third.cpp
是单独的文件[1],需要单独编译,并且在编译结束的链接阶段它们都被组合在一起。
[1] 除非second.h
包含#include "second.cpp"
或类似的东西 - 但是,这通常不是如何做到这一点,所以我将忽略该选项。
用一个具体的例子
//second.h
#ifndef SECOND_INCLUDED
#define SECOND_INCLUDED
void foo();
#endif
//first.cpp
#include second.h
void bar()
{
foo();//ok
}
void no_good()
{
wibble();//not ok - can't see declaration from here
}
//third.h
#ifndef THIRD_INCLUDED
#define THIRD_INCLUDED
void wibble();
#endif
//second.cpp
#include second.h
#include third.h
void foo()
{
wibble();//ok in second.cpp since this includes third.h
}
包含头文件的 cpp 文件会看到头文件中的内容,而不是包含头文件的其他源文件中的内容。
first.cpp 将看到 third.h 的内容(您将能够在 first.cpp 中使用在third.h 中声明并在third.cpp 中定义的函数)。假设您在 test.h 中有:
#include<iostream>
using namespace std;
在你的 test.cpp 中:
#include "test.h"
int main()
{
cout << "Hello world!" << endl;
}
如您所见,在 test.cppcout
中可以看到声明的 in 。<iostream>