像往常一样,当我的大脑弄乱我无法弄明白的东西时,我来找你们帮忙:))
这次我一直想知道为什么stdafx.h的运行方式如何?根据我的理解,它做了两件事:
现在,这两件事对我来说似乎是两个非常不同的任务,我想知道为什么他们没有采取两个单独的步骤来照顾它们?对我来说,有一个#pragma-command做书签的东西,并且可选地有一个标题文件,使用一长串的windows.h来做包括经常使用的标题......这样的事情似乎是合理的。这将我带到了我的下一个point:为什么我们被迫通过stdafx.h包含经常使用的头文件?就个人而言,我不知道我使用的任何常用标题我还没有自己的包含 - 但是这些标题可能是.dll生成所必需的吗?
提前谢谢
答案 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)
这将有助于减少长篇编辑。