first.cpp
我放#include second.h
因此,first.cpp
会看到second.cpp
。second.cpp
我放了#include third.h
。我的问题是:first.cpp
会看third.cpp
的内容吗?
ADDED
我认为如果我包含second.h,我将能够使用在second.h中声明的函数并在second.cpp中描述(定义,编写)。从这个意义上说,second.cpp的内容可用于first.cpp
答案 0 :(得分:2)
您可以将#include
视为简单的文本插入。但是,如果您加入second.h
,则“看到”second.h
而不是second.cpp
。
答案 1 :(得分:1)
使用#include
时,该文件的实际文件内容将显示为编译器输入的一部分。这意味着first.cpp
对于编译器来说就好像它里面有second.h
和third.h
一样。 second.cpp
和third.cpp
中的源代码是单独的文件[1],需要单独编译,并且它们都在编译结束时的链接阶段进行组合。
[1]除非second.h
包含#include "second.cpp"
或类似的东西 - 但这通常不是如何执行此操作,因此我将忽略该选项。
答案 2 :(得分:0)
first.cpp将看到third.h的含义(并且您将能够在third.hpp中声明并在third.cpp中定义的first.cpp函数中使用)。假设,你的test.h:
#include<iostream>
using namespace std;
并在你的test.cpp中:
#include "test.h"
int main()
{
cout << "Hello world!" << endl;
}
如您所见,cout
中声明的<iostream>
在test.cpp中可见。
答案 3 :(得分:0)
用一个具体的例子
//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文件可以看到头文件中的内容,而不是包含头文件的其他源文件。