我有一个在Visual C ++ 6中的示例项目(不是我的)。我正在尝试将其转换为Visual Studio 2008。

较旧的项目正在使用预编译的标题。现在的问题是:

  1. 什么是预编译标题?

  2. 由于较旧的项目正在使用预编译的标题。我还将在Visual Studio 2008(新项目)中使用它们。但是我遇到了错误的说法 “你忘了包括stdafx.h吗?”, ,为了解决这个问题,我将“ stdafx.h”包括在每个源文件中。这很好。但是旧的项目并未在每个文件中包括“ stdafx.h”吗?然后,如何选择退出每个源文件中的“ stdafx.h”。因为并非每个源文件都需要“ stdafx.h”中定义的include文件,所以只有很少的文件。那怎么办?

编辑: 如何从使用预编译的标头中删除某些文件?

有帮助吗?

解决方案

什么是预编译标题?

通常C ++源文件包括来自外部库的标题。在窗户中,您包括 windows.h. 。这些标头文件可能很大,并且需要一些时间来处理。每次编译C ++文件时,编译器都必须从这些标头文件中读取和处理数千行。但是外部库不会更改,只要您一次处理这些文件并保存结果,就可以节省很多时间。

预编译的标头只是一堆标头文件,已将其处理为中间表单,后来编译器可以一次又一次地使用。

视觉C ++中的预编译标题

在Visual C ++中,习惯 #include 您的所有不变标头文件 stdafx.h. 。然后,您指示编译器创建预编译的标题 stdafx.pch 在编译时 stdafx.cpp 除了包括 stdafx.h. 。如果您想在另一个中使用预编译的标题 .cpp 您必须包括的文件 stdafx.h 作为第一个包含文件,并指示编译器使用的编译器 stdafx.pch 对于您的预编译标题。

如果您遇到有关不包括的错误 stdafx.h 您只需指示编译器不要为该特定源文件使用预编译标头即可。 (或者您可以包括 stdafx.h.)

单个源文件的预编译标题设置

Visual C ++允许您控制整个项目和单个文件的编译器设置。要访问单个属性,您在解决方案资源管理器中选择源文件,请右键单击并选择 特性 从上下文菜单。在 配置属性 => C/C ++ => 预编译标题. 。如果修改这些设置,您通常需要为所有配置做到这一点(例如 调试发布).

当您使用预编译标头时,您将为整个项目设置一个指示编译器使用的设置 stdafx.pch 对于预编译的标题。这 stdafx.cpp 将具有一个单独的设置,该设置指示编译器生成 stdafx.pch, ,如果您有一些不包括的源文件 stdafx.h 您可以在这些设置上设置各个设置,以不使用预编译标题。

其他提示

编译代码时,编译器必须查看所有#CPLUD标题,以了解如何在.cpp文件中编译代码。

对于大型项目(或使用MFC等库的项目),这些标题可能会变得巨大,因此需要很长时间才能进行编译。

因为这些标题中的大多数不会经常更改(如果有的话),则可以使编译器“预编译”它们 - 它可以处理它们并将其保存到预编译的标题中。下次编译时,它不需要再次读取和编译所有这些标题,因此它要快得多。

Visual Studio中的一个要求是,如果您使用预编译标头,则必须包含在项目中的每个文件中。

如果项目很小,或者您不经常构建该项目,则可以禁用“预编译标题”选项(在项目设置中。这适用于 所有的 项目)。您会得到的唯一效果是,它可能会更慢。或将选项启用,然后添加#include“ stdafx.h”,如每个文件中的第一个包含。

  1. MSDN
  2. 通常。您需要在每个CPP文件中包含“ stdafx.h”。重点是它们是预编译的,您不必担心并非所有这些都用于某些混凝土文件中。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top