什么时候需要在c ++中使用#include

blc*_*llo 6 c++ include c-preprocessor

我已经编程了一段时间了,而且我还没有想到的一件事就是你需要的#include东西.我知道你可以安全地使用另一个文件中声明的东西.但有时我发现我可以删除一个#include,所有东西仍然可以正常编译.据我所知,这是因为已经包含的其他文件包括外部定义.有两种特殊情况我有兴趣了解以下行为:

  1. 假设我们有三个.h/.cc对:f1.h/.cc,f2.h/.cc和f3.h/.cc.如果f2.h/.cc包含f1.h且f3.h/.cc包含f2.h,则f3.h/.cc必须包含f1.h或者所有f1.h的定义都可见f3文件包含在f2中?

  2. 再次说我们有三个.h/.cc对:f1.h/.cc,f2.h/.cc和f3.h/.cc.如果f2包括f1并且f2包括f1然后f3包括f1或f2,那么f1和f2之间的"循环连接"会引起问题吗?

您是否了解我可以阅读的任何在线资源,以便更好地了解在一个文件中包含某些内容会如何影响项目中的后续文件?

Bo *_*son 6

没什么可说的.如果你使用某些东西,你必须包括声明你使用的东西的标题.关于唯一的例外是前向声明类/结构或方法,如:

class myclass;   
Run Code Online (Sandbox Code Playgroud)

如果你只需要声明一个指针或类的引用.

您不能真正依赖其他标题,包括您需要的标题.任何一天,其他标题的维护者都会意识到他/她不再需要包含它并将其删除.

  • +1,永远不要依赖别人做你的工作; 如果你需要什么,请自己包括. (3认同)