预编译头是编译过程中使用的优化.
基本上,如果你编译类似于stdio.h完全相同的定义和环境的东西,你可以安全地假设每次结果都是相同的.
因此编译器会记住该标头的"已编译"版本,因此不必再次执行此操作.
实际上,如果每个源文件都以以下内容开头,那么它往往是最初的标题组,因此会产生差异.
#define XYZZY 42
#include <stdio.h>
#include <stdlib.h>
Run Code Online (Sandbox Code Playgroud)
第一个完全编译,但记住紧接第三行之后的状态.下一个可以完全抛弃这三行并加载保存的状态,然后继续编译文件的其余部分.
我第一次看到这个功能是在Windows上有它的大量 windows.h头文件,相信我,它对整体构建时间产生了很大的影响.