1

我所拥有的 C++ Premier 并没有对我要问的问题说太多,这就是我在谷歌上搜索得到的LINK

当编译器编译#include "example.h" 行时,它会将example.h 的内容复制到当前文件中。

所以,如果这是真的,在下面的例子中,为什么 Bh 不知道 Ah ?文件是如何编译的?我是否必须在每个使用它的文件中包含 Ah,然后在使用这些文件的 program.h 中包含每个使用 Ah 的文件?

In program.h
#include "A.h"
#include "B.h"
4

1 回答 1

1

警告:非常糟糕的代码:

a.h

#ifndef A_H
#define A_H

#define SOME_LIT "string lit in A.h"

#endif

b.h

#ifndef B_H
#define B_H

#include <iostream>

void foo() { std::cout << SOME_LIT << '\n'; }

#endif

main.cpp

#include "a.h"
#include "b.h"

int main()
{
    foo();
}

印刷:

$ ./a.out 
string lit in A.h

所以你可以看到b.h知道关于definein a.h。如果你忘记了#include "a.h",或者把它放在下面 #include "b.h",这会坏掉。

但是,作为一般规则,您应该#include在需要的任何文件中显式地添加标题。这样你就知道你只关心fooin main,所以你只是标题,#include即:foob.h

#include "b.h"
int main()
{
    foo();
}
于 2013-06-13T15:02:14.887 回答