当包含.h文件时,将包含在.cpp文件中包含

时间:2020-06-30 22:58:02

标签: c++

所以可以说我有一堆这样的文件:

  • main.cpp:包含main()函数
  • foo.h:声明某些资源
  • foo.cpp:在foo.h中声明的资源的定义
  • goo.h:声明其他一些资源

现在foo.cpp包括goo.h

// foo.cpp

#include "goo.h"
//...
//...

我的问题是,如果我在foo.h文件中包含main.cpp,是否可以访问goo.h文件中main.cpp中的定义?还是我需要在goo.h中加入main.cpp

// main.cpp
#include "foo.h"

int main() {
  // Can i access the definitions in goo.h here without including goo.h??
}

如果需要进一步说明,请告诉我。 TIA!

2 个答案:

答案 0 :(得分:7)

如果在main.cpp文件中包含foo.h,是否可以在main.cpp文件中访问goo.h中的定义?

取决于foo.h包含的内容。如果它包含goo.h,那么您可以从技术上访问main.cpp中的那些定义。包容是传递的“操作”。如果c包括b,而b包括a,则c间接包括a

如果foo.h不包含goo.h(直接或间接),则没有理由为什么包含foo.h会导致goo.h被包含。

.cpp文件中包含的内容在包含.h文件时被包含

否。

尽管包含是可传递的,但它不是对称的。 foo.cpp包括foo.h,但foo.h不包括foo.cpp


请注意,依赖于可传递包含的标头中的定义/声明通常是一种不良做法。

还是我需要在main.cpp中包含goo.h?

如果在main.cpp中您依赖于goo.h的定义/声明,则应在goo.h中包含main.cpp

答案 1 :(得分:3)

如果既不直接在代码文件中包含头文件,也不包括间接包含头文件的头文件,则在编译代码文件时将不使用该头文件。其中的任何内容都无法访问。