所以可以说我有一堆这样的文件:
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!
答案 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)
如果既不直接在代码文件中包含头文件,也不包括间接包含头文件的头文件,则在编译代码文件时将不使用该头文件。其中的任何内容都无法访问。