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.h
,B.cpp
包括 B.h
)。此外,您在使用 header 中声明的函数的任何文件中包含 header(例如,如果您在 Main.cpp
中使用 A.h
和 B.h
的声明你也包括那些文件)。
P.S。但是,您可以在 header 文件中的声明旁边定义所有内容,但正如我之前所说,预处理器不会做任何花哨的事情 - 它只是将 include 的内容添加到目标文件中,并且您通常不想拥有所有定义,因为包含它的每个翻译单元都会一遍又一遍地重复相同的定义。
你包括你需要的。
如果 A.cpp
需要 A.h
那么它应该包含它。与 B.cpp
相同,可能需要包括 B.h
.
如果 Main.cpp
使用 A
和 B
那么它应该包括 A.h
和 B.h
.
Main.cpp
不应依赖间接包含。例如 A.h
确实包含 B.h
那么 Main.cpp
同时使用 A
和 B
应该仍然包含 A.h
和 B.h
即使如果 Main.cpp
仅直接包含 A.h
(并且也间接包含 B.h
),则代码将编译。)
按什么顺序?
如果您遵循始终包含所用内容的规则(而不是依赖于间接包含 header 或依赖之前包含的其他 header),那么 [=30 的顺序=] 指令应该无关紧要。更改包含破坏构建提示的问题,其中包含应该修复的 headers 之一。如果你做对了,那么包含的顺序只是一个风格问题。
我刚开始学习 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.h
,B.cpp
包括 B.h
)。此外,您在使用 header 中声明的函数的任何文件中包含 header(例如,如果您在 Main.cpp
中使用 A.h
和 B.h
的声明你也包括那些文件)。
P.S。但是,您可以在 header 文件中的声明旁边定义所有内容,但正如我之前所说,预处理器不会做任何花哨的事情 - 它只是将 include 的内容添加到目标文件中,并且您通常不想拥有所有定义,因为包含它的每个翻译单元都会一遍又一遍地重复相同的定义。
你包括你需要的。
如果 A.cpp
需要 A.h
那么它应该包含它。与 B.cpp
相同,可能需要包括 B.h
.
如果 Main.cpp
使用 A
和 B
那么它应该包括 A.h
和 B.h
.
Main.cpp
不应依赖间接包含。例如 A.h
确实包含 B.h
那么 Main.cpp
同时使用 A
和 B
应该仍然包含 A.h
和 B.h
即使如果 Main.cpp
仅直接包含 A.h
(并且也间接包含 B.h
),则代码将编译。)
按什么顺序?
如果您遵循始终包含所用内容的规则(而不是依赖于间接包含 header 或依赖之前包含的其他 header),那么 [=30 的顺序=] 指令应该无关紧要。更改包含破坏构建提示的问题,其中包含应该修复的 headers 之一。如果你做对了,那么包含的顺序只是一个风格问题。