包括应用程序中的所有头文件

Including all header files in application

本文关键字:文件 应用程序 包括      更新时间:2023-10-16

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

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

通常,如果您编写应用程序,则应仅包含 cpp 文件中真正需要的头文件。如果你有一个非常大的应用程序,你应该在头中使用前向声明,并在 cpp 文件中包含必要的文件。这样,代码中的更改仅影响 cpp 文件的最小值,因此编译器只需编译真正更改的内容。当涉及到不经常更改的库或代码时,情况可能会完全颠倒。文件名"Precompiled.h"已经是一个提示。编译器可以将标头预编译为特殊目标文件,通常称为 PCH 文件。这样,编译器就不必在每个编译时解析每个包含。在繁重的嵌套包含上,这对编译速度有很大影响,因为只有一个预解析文件,而不是要加载和解析的许多文件。要存档,您必须将一个或多个标头声明为用于构建预编译标头的中心文件。如何做到这一点在不同的编译器之间有所不同。例如,Visual studio使用头文件"stdafx.h"作为头文件预编译的中心。因此,只有头文件应该包含不经常更改的头文件。此外,该文件必须首先包含在每个 cpp 文件中。这是因为编译器无法再检测之前包含的包含文件是否可能对预编译文件产生影响。为避免这种情况,不允许在预编译的包含之前包含。

回到你的问题。将每个文件包含在一个头文件中以将其用作预编译头根本没有意义,因为它与预编译头文件的含义相悖。

这是一个

非常糟糕的主意。

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

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

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

PS 优先使用前向声明而不是 #include