我所拥有的 C++ Premier 并没有对我要问的问题说太多,这就是我在谷歌上搜索得到的LINK:
当编译器编译#include "example.h" 行时,它会将example.h 的内容复制到当前文件中。
所以,如果这是真的,在下面的例子中,为什么 Bh 不知道 Ah ?文件是如何编译的?我是否必须在每个使用它的文件中包含 Ah,然后在使用这些文件的 program.h 中包含每个使用 Ah 的文件?
In program.h
#include "A.h"
#include "B.h"
警告:非常糟糕的代码:
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();
}