C++ 头文件和源文件 - 包含的内容和顺序

C++ Header & Source Files - What To Include And In Which Order

我刚开始学习 C++,无法理解头文件和源文件的概念,特别是我应该在何处包含哪些文件。

假设我有 类 A 和 B,每个文件的内容都分为一个头文件和一个源文件,并且我有一个文件,我想在其中使用这些文件 类 .

├ A.h
├ A.cpp
├ B.h
├ B.cpp
└ Main.cpp

我需要在何处包含哪个文件,是否可以 compile/link 使用一个命令包含所有文件?

Which file do I need to include where

#include指令实际上是一个非常简单的预处理指令,它只是将指定文件的内容添加到目标文件中。通常,您在 header 文件中保留函数声明,并在相应的 cpp 文件中保留上述函数的定义,因此您至少希望将 header 包含在其中(在您的情况下A.cpp 包括 A.hB.cpp 包括 B.h)。此外,您在使用 header 中声明的函数的任何文件中包含 header(例如,如果您在 Main.cpp 中使用 A.hB.h 的声明你也包括那些文件)。

P.S。但是,您可以在 header 文件中的声明旁边定义所有内容,但正如我之前所说,预处理器不会做任何花哨的事情 - 它只是将 include 的内容添加到目标文件中,并且您通常不想拥有所有定义,因为包含它的每个翻译单元都会一遍又一遍地重复相同的定义。

你包括你需要的。

如果 A.cpp 需要 A.h 那么它应该包含它。与 B.cpp 相同,可能需要包括 B.h.

如果 Main.cpp 使用 AB 那么它应该包括 A.hB.h.

Main.cpp 不应依赖间接包含。例如 A.h 确实包含 B.h 那么 Main.cpp 同时使用 AB 应该仍然包含 A.hB.h 即使如果 Main.cpp 仅直接包含 A.h(并且也间接包含 B.h),则代码将编译。)

按什么顺序?

如果您遵循始终包含所用内容的规则(而不是依赖于间接包含 header 或依赖之前包含的其他 header),那么 [=30 的顺序=] 指令应该无关紧要。更改包含破坏构建提示的问题,其中包含应该修复的 headers 之一。如果你做对了,那么包含的顺序只是一个风格问题。