C ++中包含链的功能如何?

时间:2013-08-16 10:07:07

标签: c++ include dependencies

  • 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

4 个答案:

答案 0 :(得分:2)

您可以将#include视为简单的文本插入。但是,如果您加入second.h,则“看到”second.h而不是second.cpp

答案 1 :(得分:1)

使用#include时,该文件的实际文件内容将显示为编译器输入的一部分。这意味着first.cpp对于编译器来说就好像它里面有second.hthird.h一样。 second.cppthird.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文件可以看到头文件中的内容,而不是包含头文件的其他源文件。