Visual Studio中“stdafx.h”的用途是什么?

当我在VS2010中启动项目时,stdafx.h会自动生成。 我需要制作跨平台的C ++库,所以我不/不能使用这个头文件。

这个是来做什么的? 我可以删除这个头文件吗?


所有C ++编译器都有一个严重的性能问题需要处理。 编译C ++代码是一个漫长而缓慢的过程。

编译包含在C ++文件之上的头文件是一个非常漫长的过程。 编译构成Windows API和其他大型API库的巨大头结构是一个非常非常漫长的过程。 对于每个单独的Cpp源文件,必须重复执行,并且结束,这是一个死亡跪拜。

这不是Windows所独有的,而是所有编译器都必须针对像Windows这样的大型API进行编译的老问题。

微软编译器可以通过一个称为预编译头的简单技巧来改善这个问题。 这个技巧非常漂亮:尽管每个CPP文件都可能潜在地和合法地给每个Cpp文件顶部包含的头文件链赋予不同的含义(例如,在包含之前有不同的宏#define'd,或者通过以不同的顺序包含标题),这通常不是这种情况。 大多数情况下,我们有几十或几百个包含的文件,但它们都是为了在应用程序中编译的所有Cpp文件具有相同的含义。

如果编译器不需要每次都从头开始编译每个Cpp文件加几十个包含字符的文件,那么编译器可以节省大量时间。

技巧包括指定一个特殊的头文件作为所有编译链的起点,即所谓的“预编译头文件”,这个文件通常是一个名为stdafx.h的文件,仅仅出于历史原因。

只需在您的stdafx.h文件中按照适当的顺序列出您的API的所有大型头文件,然后在任何有意义的内容之前使用#include "stdafx.h"在顶部开始每个CPP文件(只需关于唯一允许的事情是评论)。

在这些条件下,编译器不是从头开始编译,而是从编译stdafx.h所有内容的已保存结果开始编译。

我不认为这个技巧是微软编译器独有的,我也不认为这是一个原创性的开发。

对于Microsoft编译器,控制预编译头文件使用的设置由编译器的命令行参数控制: /Yu "stdafx.h" 。 正如你可以想象的那样,使用stdafx.h文件名只是一个约定; 如果您愿意,您可以更改名称。

在Visual Studio 2010中,通过右键单击CPP项目,选择“属性”并导航到“Configuration Properties C / C ++ Precompiled Headers”,从GUI控制此设置。 对于其他版本的Visual Studio,GUI中的位置将有所不同。

请注意,如果您禁用预编译头文件(或通过不支持它们的工具运行项目),它不会使您的程序非法; 它只是意味着你的工具每次都会从头开始编译所有的东西。

如果你正在创建一个没有Windows依赖关系的库,你可以很容易地从stdafx.h文件中注释掉或删除#includes。 没有必要删除文件本身,但显然你也可以这样做,通过禁用上面的预编译头文件设置。


这是一个“预编译头文件” - 您在stdafx.h中包含的任何头文件都会进行预处理,以便在后续编译过程中节省时间。 你可以在MSDN上阅读更多关于它的信息。

如果您正在构建跨平台应用程序,请在创建项目时选中“空项目”,并且Visual Studio不会在您的项目中放置任何文件。


我刚刚碰到了这个问题,因为我试图创建自己的骨骼框架,但是通过在Visual Studio 2017中创建一个新的Win32程序选项开始。“stdafx.h”是不必要的,应该删除。 然后,您可以删除解决方案资源管理器中的愚蠢“stdafx.h”和“stdafx.cpp”以及项目中的文件。 在这个地方,你需要放置

#include <Windows.h>

代替。

链接地址: http://www.djcxy.com/p/86839.html

上一篇: What's the use for "stdafx.h" in Visual Studio?

下一篇: snprintf and Visual Studio 2010