为什么stdafx.h的运行方式如何呢?

时间:2008-12-17 07:35:42

标签: c++ visual-studio precompiled-headers stdafx.h

像往常一样,当我的大脑弄乱我无法弄明白的东西时,我来找你们帮忙:))

这次我一直想知道为什么stdafx.h的运行方式如何?根据我的理解,它做了两件事:

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

现在,这两件事对我来说似乎是两个非常不同的任务,我想知道为什么他们没有采取两个单独的步骤来照顾它们?对我来说,有一个#pragma-command做书签的东西,并且可选地有一个标题文件,使用一长串的windows.h来做包括经常使用的标题......这样的事情似乎是合理的。这将我带到了我的下一个point:为什么我们被迫通过stdafx.h包含经常使用的头文件?就个人而言,我不知道我使用的任何常用标题我还没有自己的包含 - 但是这些标题可能是.dll生成所必需的吗?

提前谢谢

4 个答案:

答案 0 :(得分:6)

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

请参阅此处: Is there a way to use pre-compiled headers in VC++ without requiring stdafx.h?了解替代方法的详细信息。

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

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

  

stdafx.h是一个文件   这描述了两个标准系统   和项目特定的包含文件   经常使用但很难使用   永远改变了。

     

兼容的编译器会   预编译此文件以减少   整体编译时间。 Visual C ++会   之前没有编译任何东西   源文件中的#include "stdafx.h" ,除非是编译选项   /Yu'stdafx.h'未经检查(由   默认);它假定了所有代码   来源并包括该行   已编译。

答案 3 :(得分:-5)

这将有助于减少长篇编辑。