C ++ Premier我没有多说我要问的内容,这就是我用谷歌搜索LINK:
当编译器编译#include“example.h”行时,它会将example.h的内容复制到当前文件中。
所以,如果这是真的,在下面的例子中为什么B.h不知道A.h?它是如何编译文件的?我是否必须在每个使用它的文件中包含A.h,然后在program.h中包含使用这些文件的每个文件?
In program.h
#include "A.h"
#include "B.h"
答案 0 :(得分: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
了解define
中的a.h
。如果您忘记了#include "a.h"
,或将其置于 #include "b.h"
下方,则会中断。
但是,作为一般规则,您应该在您需要的任何文件中明确#include
标题。这样您知道自己只关心foo
中的main
,因此只需#include
foo
标题b.h
:
#include "b.h"
int main()
{
foo();
}