我应该把头文件放在.cpp文件还是.h文件中?

9

我应该把头文件放在.cpp文件中还是.h文件中?

我正在开发一个项目,试图找到一种简洁的方法来遵循一次而终。目前的情况是,文件既在.cpp文件中也在.h文件中包含。例如,有时它们在someFile.h中使用#include,在someFile.cpp中有时使用。

我想知道,放在哪里进行包含有关系吗?这两种方法都可以工作,但会不会有什么问题?

谢谢


通常在.h文件中使用struct/class类型声明,只需要指针类型即可。在.cpp文件中进行包含。这有助于避免循环包含问题。 - Hot Licks
@HotLicks,一个好的包含保护不是可以防止循环包含吗? - ott--
2个回答

16

一般来说,只应将头文件(.h)中需要的头文件包含进去。换句话说,如果类型在头文件中使用且在其他地方声明,则应该包含这些头文件。否则,仅在.cpp或.c文件中包含头文件。这可以将编译时间保持到最小,并更好地显示哪些文件是必需的。

一个例外是将非常常用的头文件包含在一个标准化的.h文件中,通常称为Stdafx.h,然后启用预编译头。


6

在当前文件中包含所需的头文件,无论是.h文件还是.cpp文件。


有任何原因投反对票吗? - GuLearn
1
从编译速度的角度来看,那实际上非常重要。 - zakinster
1
你有没有办法在.h文件中避免包含一个被头文件所需的头文件?! - GuLearn
1
@YZ.leaner 前向声明作为实例,但如果你真的需要头文件,那么就没有问题,你别无选择。我想当它是.cpp实际上需要头文件而不是相应的.h时,这个问题就会被提出来。 - zakinster
2
我现在意识到可能误读了你的回答。实际上,我同意你所说的,但我不确定它是否真正回答了问题。二进制文件确实相同,但编译时间不同。如果 foo.cpp 需要 bar.h,而您将 include 放在 foo.h 而不是 foo.cpp 中,则会在需要 foo.h 的每个 .o 的编译中包含 bar.h,即使它可能不需要 bar.h,从而降低编译性能。 - zakinster
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接