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

当我在Visual Studio 2010中启动项目时,会自动生成一个名为stdafx.h的文件。我须要建立一个跨平台的C ++库,所以我不能/不能使用此头文件。 ide

什么是stdafx.h用于? 我能够删除这个头文件吗? 工具


#1楼

我本身也遇到了这个问题,由于我试图建立一个简单的骨架,但最初是在Visual Studio 2017中建立一个新的Win32程序选项。“stdafx.h”是没必要要的,应该删除。 而后,您能够删除解决方案资源管理器中的愚蠢“stdafx.h”和“stdafx.cpp”以及项目中的文件。 在它的位置,你须要放 性能

#include <Windows.h>

代替。 spa


#2楼

它是一个“预编译的头文件” - 您在stdafx.h中包含的任何头文件都通过预处理,以便在后续编译期间节省时间。 您能够在MSDN上阅读更多相关信息。 命令行

若是您正在构建跨平台应用程序,请在建立项目时选中“清空项目”,Visual Studio将不会在项目中放置任何文件。 code


#3楼

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

编译包含在C ++文件之上的标头是一个很是漫长而缓慢的过程。 编译构成Windows API和其余大型API库的巨大标头结构是一个很是 很是漫长的过程。 对于每个Cpp源文件来讲,必须完成它,而且结束和结束是一个致命的丧钟。 开发

这不是Windows独有的,可是全部必须针对像Windows这样的大型API编译的编译器所面临的老问题。 get

Microsoft编译器能够经过称为预编译头的简单技巧来改善此问题。 诀窍很漂亮:虽然每一个CPP文件均可以在法律上给每一个Cpp文件顶部包含的头文件链带来一些不一样的含义(经过使用不一样的宏#include在包含以前定义,或者经过以不一样的顺序包括标题),这一般不是这种状况。 大多数状况下,咱们有几十个或几百个包含的文件,但它们都与您的应用程序中编译的全部Cpp文件具备相同的含义。 编译器

若是编译器没必要每次都从头开始编译每一个Cpp文件加上其中的几十个包含,那么编译器能够节省大量时间。

技巧包括指定一个特殊的头文件做为全部编译链的起点,即所谓的“预编译头”文件,它一般是一个名为stdafx.h的文件,仅仅是出于历史缘由。

只需按照适当的顺序在stdafx.h文件中列出API的全部大标题,而后在任何有意义的内容以前使用#include "stdafx.h"在最顶层开始每一个CPP文件(只需关于惟一容许的事情是评论)。

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

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

对于Microsoft编译器,控制预编译头的使用的设置由编译器的命令行参数控制: /Yu "stdafx.h" 。 能够想象,使用stdafx.h文件名只是一种约定; 若是您愿意,能够更更名称。

在Visual Studio 2010中,经过右键单击CPP项目,选择“属性”并导航到“配置属性\\ C / C ++ \\预编译标题”,从GUI控制此设置。 对于其余版本的Visual Studio,GUI中的位置将不一样。

请注意,若是您禁用预编译的标头(或经过不支持它们的工具运行您的项目),它不会使您的程序非法; 它只是意味着您的工具每次都会从头开始编译全部内容。

若是要建立没有Windows依赖项的库,则能够轻松地从stdafx.h文件中注释掉或删除#includes。 无需删除文件自己,但显然您也能够经过禁用上面的预编译头设置来删除文件。


#4楼

“Stdafx.h”是一个预编译的头文件。它包含标准系统包含文件和项目特定的包含文件,这些文件常常使用但不常常更改。这样能够减小编译时间和没必要要的处理。

预编译的头文件stdafx.h基本上用于Microsoft Visual Studio,让编译器知道编译后的文件,无需从头开始编译。 您能够阅读更多相关信息

http://www.cplusplus.com/articles/1TUq5Di1/

https://docs.microsoft.com/en-us/cpp/ide/precompiled-header-files?view=vs-2017

相关文章
相关标签/搜索