11

像往常一样,当我的大脑在弄乱我自己无法弄清楚的事情时,我会向你们寻求帮助:)

这次我一直想知道为什么 stdafx.h 会这样工作?据我了解,它做了两件事:

  • 包括我们 可能(?)使用并且很少更改的标准标题
  • 在不再预编译代码时用作编译器书签。

现在,这两件事对我来说似乎是两个非常不同的任务,我想知道他们为什么不做两个单独的步骤来照顾它们?对我来说,让#pragma-command 来做书签似乎是合理的,并且可以选择在 windows.h 的行中添加一个头文件来包含常用的头文件......这让我进入了我的下一个要点:为什么我们被迫通过 stdafx.h 包含常用的标头?就个人而言,我不知道我使用的任何经常使用的标头,我还没有为自己做包含 - 但也许这些标头对于 .dll 生成是必需的?

提前谢谢

4

4 回答 4

6

stdafx.h 是让 Visual Studio 执行预编译标头的一种方法。这是一种易于使用、易于自动生成的方法,适用于较小的应用程序,但可能会导致较大的复杂应用程序出现问题,因为它有效地鼓励使用单个头文件,这可能会导致组件之间的耦合否则是独立的。如果用于系统头文件,它往往没问题,但随着项目规模和复杂性的增长,很容易将其他头文件放入其中,然后突然更改任何头文件会导致重新编译项目中的所有内容。

看这里:有没有办法在 VC++ 中使用预编译的头文件而不需要 stdafx.h?有关替代方法的详细信息。

于 2008-12-17T08:08:56.457 回答
4

您不必强制使用“stdafx.h”。您可以在项目属性中(或在创建项目时)选中使用预编译的标头,您将不再需要stdafx.h

编译器使用它作为线索,以便能够在一个文件中分别预编译最常用的头.pch文件以减少编译时间(不必每次都编译它)。

于 2008-12-17T07:37:47.890 回答
1

它可以缩短编译时间,因为其中的内容总是首先编译(请参阅下面引用中的详细信息):

stdafx.h 是一个描述标准系统和项目特定包含文件的文件,这些文件经常使用但几乎从未更改过。

兼容的编译器将预编译此文件以减少总体编译时间。Visual C++ 不会编译 #include "stdafx.h"源文件中的任何内容,除非编译选项 /Yu'stdafx.h' 未选中(默认情况下);它假定源代码中直到并包括该行的所有代码都已编译。

于 2008-12-17T07:42:22.140 回答
-5

这将有助于减少长时间的编译。

于 2008-12-17T07:37:20.187 回答