【发布时间】:2026-01-11 02:35:01
【问题描述】:
我已经编程了一段时间,但我仍然没有完全弄清楚的一件事就是你什么时候需要#include 一些东西。我知道为了安全起见,只要您使用在另一个文件中声明的内容,您就可以这样做。但是有时我发现我可以删除 #include 并且一切仍然可以正常编译。据我所知,这是因为已包含的其他文件已包含外部定义。我有兴趣了解以下两种特殊情况:
假设我们有三个 .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 中时的文件?
再次假设我们有三个 .h/.cc 对:f1.h/.cc、f2.h/.cc 和 f3.h/.cc。如果 f2 包含 f1,f2 包含 f1,然后 f3 包含 f1 或 f2,f1 和 f2 之间的“循环链接”会导致问题吗?
您是否知道有什么好的在线资源可供我阅读以更好地了解在一个文件中包含某些内容如何影响项目中的后续文件?
【问题讨论】:
-
在我看来,您已经了解了大部分内容。其余的可以通过相当简单的编译时测试来确定,我强烈建议您尝试而不是在这里询问。如果失败或您不明白发生了什么,请回来询问。
-
注意,我认为这是一个非常有效的问题。我只是建议你自己做这个会学得更好。
-
我认为只在文件中包含所需的文件是正确的。如果由于某种原因其他头文件中的包含更改,您必须再次手动执行此操作。因此,包括更多似乎并没有错。您还可以查看
#pragma once,有时这是一个方便的命令。 -
-1。我看不出有人如何“赞成质疑”这个问题。如果提问者检查“c++ 中的翻译单元”,这个问题就可以避免。此外,这就像问“'if'是什么?”......类似的东西。如果答案不明显,您应该返回并查看基础知识。没有冒犯,但实际上,我试着读了好几遍,显然看不到这本书的亮点。
-
@Poni 我是一名专业的 C++ 程序员,我理解这会让初学者感到困惑。当您进入超出最基本的复杂性的项目时,这可能会很快变得混乱。这当然是一个非常初学者的问题,但这并不意味着它不适合问,当然也不像 if() 那样简单。
标签: c++ include c-preprocessor