aki*_*kif 31 visual-c++-6 precompiled-headers visual-studio-2008
我有一个示例项目(不是我的)在Visual C++ 6中.我正在尝试将其转换为Visual Studio 2008.
旧项目使用预编译头.现在的问题是:
什么是预编译头文件?
由于旧项目使用预编译头.我还将在Visual Studio 2008(新项目)中使用它们.但我得到的错误是"你忘了包含stdafx.h",为了解决这个问题,我在每个源文件中加入了"stdafx.h".这非常有效.但是旧项目在每个文件中都没有包含"stdafx.h"?那么如何选择退出在每个源文件中包含"stdafx.h".因为不是每个源文件都需要"stdafx.h"中定义的包含文件,所以只有少数文件.怎么做的?
编辑: 如何使用预先设定的标题来解释某些文件?
Mar*_*age 55
什么是预编译头文件?
C++源文件通常包含来自外部库的标头.在Windows中,您包括windows.h.这些头文件可能非常大,需要一些时间来处理.每次编译C++文件时,编译器都必须从这些头文件中读取和处理数千行.但是外部库不会更改,如果您只处理这些文件并保存结果,则可以节省大量时间.
预编译头只是一堆头文件,已经处理成中间形式,以后编译器可以反复使用.
Visual C++中的预编译头文件
在Visual C++中,#include所有未更改的头文件都是惯用的stdafx.h.然后,您指示编译器在编译时创建预编译的头stdafx.pch,stdafx.cpp除了include之外什么都不做stdafx.h.如果要在另一个.cpp文件中使用预编译头,则必须包含stdafx.h第一个包含文件,并指示编译器stdafx.pch用于预编译头.
如果您收到不包含的错误,则stdafx.h只需指示编译器不要对该特定源文件使用预编译头.(或者你可以包括stdafx.h.)
单个源文件的预编译头设置
Visual C++允许您控制整个项目和单个文件的编译器设置.要访问单个属性,请在解决方案资源管理器中选择源文件,右键单击它并从上下文菜单中选择" 属性 ".预编译头的选项可在Configuration Properties => C/C++ => Precompiled Headers中找到.如果修改这些设置,通常需要对所有配置执行此操作(例如,调试和发布).
当您使用预编译头时,您将拥有整个项目的设置,指示编译器stdafx.pch用于预编译头.该stdafx.cpp会指示编译器生成一个单独的设置stdafx.pch,如果你有一些源文件不包含stdafx.h您可以对这些设置单独的设置为不使用预编译头.
编译代码时,编译器必须查看所有 #included 头文件,以了解如何编译 .cpp 文件中的代码。
对于大型项目(或使用 MFC 之类的库的项目),这些头文件会变得很大,因此需要很长时间来编译。
因为这些头文件中的大多数不经常更改(如果有的话),您可以让编译器“预编译”它们 - 它处理它们并将其状态保存到预编译头文件中。下次编译时,它不需要再次读取和编译所有这些头文件,因此速度要快得多。
Visual Studio 中的一项要求是,如果您使用预编译头文件,则必须将其包含在项目中的每个文件中。
如果项目很小,或者您不经常构建它,那么您可以禁用“预编译头”选项(在项目设置中。这适用于整个项目)。你会得到的唯一效果是它可能编译得更慢。或者保持该选项处于启用状态,只需添加 #include "stdafx.h" 作为每个文件中的第一个包含。