1
  • 在我的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 可用

4

4 回答 4

2

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

于 2013-08-16T10:17:01.133 回答
2

当使用#include该文件的实际文件内容时,该文件的内容将作为编译器输入的一部分出现。这意味着first.cpp在编译器看来,它就好像它有second.h并且third.h在它里面一样。second.cpp和中的源代码third.cpp是单独的文件[1],需要单独编译,并且在编译结束的链接阶段它们都被组合在一起。

[1] 除非second.h包含#include "second.cpp"或类似的东西 - 但是,这通常不是如何做到这一点,所以我将忽略该选项。

于 2013-08-16T10:17:34.630 回答
1

用一个具体的例子

//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 文件会看到头文件中的内容,而不是包含头文件的其他源文件中的内容。

于 2013-08-16T10:44:46.963 回答
0

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>

于 2013-08-16T10:26:55.220 回答