Back to Top

预编译头文件

何时需要预编译源代码

预编译代码有助于在开发周期中缩短编译时间,特别是在以下情况中:

  • 总是使用不经常改动的大型代码体。
  • 程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。 在这种情况下,可以将所有包含文件预编译为一个预编译头。
  • 用于创建预编译头文件的第一次编译所花费的时间比后面的编译稍长一些。 通过包含预编译代码可以加快后面的编译速度。
  • C 和 C++ 程序都可以预编译。在 C++
  • 编程中,常见的做法是将类接口信息分别放到不同的头文件中。 此后就可以将这些头文件包含在使用该类的程序中。 通过预编译这些头文件,可以缩短程序的编译时间。

两种预编译代码方法

  • 使用 Visual C++ 可以预编译任何 C 或 C++代码;并不仅限于预编译头文件。
  • 预编译要求先进行规划,但如果预编译的是除简单的头文件之外的源代码,则将大幅度提高编译速度。
  • 如果知道源文件使用一组通用的头文件但包含顺序不同,或者希望将源代码包含在预编译中,则需预编译代码。

使用预编头文件

一定要有一个文件设置为创建预编译头(/Yc),通常这个文件是stdafx.cpp, 其他cpp文件设置为使用预编译头(/Yu), 如果工程中没有文件一个文件设为创建预编译头(/Yc)而工程设置为使用预编译头(/Yu),则会出现找不到$(IntDir)\\$(TargetName).pch文件的问题, 如果把每个源文件都设为创建预编译头(/Yc)),则会出现Debug编译成功,Release编译失败,提示找到一个或多个多重定义的符号的问题。

  1. 预编译头一定要放在源文件的开头,否则就会出现编译错误,个人认为原因是担心其他的头文件或者宏定义会造成预编头内容的不同。
  2. 博强给的一些建议:预编译头中包含的头文件是不经常改动的头文件,所以一般是标准头文件,也就是用#include <…>括起来的内容。 在预编译头中一般不要写上using namespace …;这样对于不同命名空间中重名类的使用会带来问题。