为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

VisualStudio中使用的“stdafx.h”是什么?名为stdafx.h在VisualStudio 2010中启动项目时自动生成。我需要一个跨平台的C+库,所以我不能/不能使用这个头文件。是什么stdafx.h用来?我可以删除这个头文件吗?
查看完整描述

3 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

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

编译C+文件顶部包含的标题是非常漫长而缓慢的过程。编译构成WindowsAPI和其他大型API库一部分的大型头结构是非常非常漫长而缓慢的过程。每一个CPP源文件都要重复一遍,一遍又一遍,这是一个丧钟。

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

microsoft编译器可以通过一个名为预编译头..诀窍是相当巧妙的:虽然每个CPP文件都有可能并且合法地赋予每个CPP文件顶部包含的头文件链不同的含义(比如在包含之前定义不同的宏,或者按不同的顺序包含头),但情况通常并非如此。大多数情况下,我们有几十个或数百个包含的文件,但它们都是为了对您的应用程序中正在编译的所有CPP文件具有相同的含义。

如果编译器不必每次都开始编译每个CPP文件,再加上它的几十个包含的内容,那么编译器就可以节省大量的时间。

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

只需按照适当的顺序在stdafx.h文件中列出API的所有大型头,然后用#include "stdafx.h",在任何有意义的内容之前(之前只允许评论)。

在这种情况下,而不是开始从头开始,编译器将从已保存的编译结果开始编译stdafx.h.

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

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

在VisualStudio 2010中,通过右键单击CPP项目,选择“Properties”并导航到“Configuration Properties\C/C+\预编译头”,从GUI控制此设置。对于其他版本的VisualStudio,GUI中的位置将有所不同。

请注意,如果禁用预编译的标头(或者通过不支持它们的工具运行项目),这不会使程序成为非法;这意味着您的工具每次都会从头开始编译所有内容。

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


查看完整回答
反对 回复 2019-07-01
  • 3 回答
  • 0 关注
  • 1301 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信