在应用程序中包含所有头文件

时间:2013-09-08 15:03:36

标签: c++

我最近查看了C ++应用程序的源代码,发现每个类都没有#include所需的组件,而是#include'一个“Precompiled.h”标头。在这个预编译的头文件中,几乎包含了应用程序中的每个头文件(并非所有头文件都清楚,列表的长度和顺序是故意的)。从本质上讲,这意味着每个类都包含应用程序中的每个其他类。

这是明智的吗?为什么或为什么不呢?

2 个答案:

答案 0 :(得分:3)

通常,如果您编写应用程序,则应该只包含cpp文件中真正需要的头文件。如果你有一个非常大的应用程序,你应该在标题中使用forward声明并在cpp文件中包含必要的文件。这样,代码中的更改只会影响cpp文件的最小值,因此编译器只需要编译真正已更改的内容。 当涉及到不经常变化的库或代码时,情况可以彻底改变。文件名“Precompiled.h”已经是一个提示。编译器可以将标头预编译为特殊的目标文件,通常称为PCH文件。有了这个,编译器就不必在每个编译时解析每个包含。在重型嵌套包含中,这对编译速度有很大影响,因为只有一个预先准备好的文件,而不是要加载和解析的许多文件。要归档,您必须将一个或多个标头声明为一种用于构建预编译标头的中心文件。你如何做到这一点因不同的编译器而异。 例如,Visual Studio使用头文件“stdafx.h”作为头文件预编译的中心。因此,只有头文件应该包含那些不经常更改的头文件。此外,文件必须首先包含在每个cpp文件中。这是因为如果之前包含的包含文件可能对预编译文件有影响,则编译器不能再检测到。为避免这种情况,包括在不允许预编译包含之前。

回到你的问题。将每个文件包含在一个头文件中以将其用作预编译头文件完全没有意义,因为它会影响预编译头文件的含义。

答案 1 :(得分:1)

这是一个非常糟糕的主意。

对于.cpp文件,只包含最少数量的#include文件。

因此,当其中一个改变时,make(或道德等值)将不需要重新编译整个批次。

在开发过程中节省大量时间。

PS优先使用#include

的前向声明