预编译头到底是什么?它们何时被使用?
预编译头文件是编译过程中使用的一种优化。
基本上,如果你使用相同的定义和环境来编译类似于stdio.h
这样的文件,你可以安全地假设每次的结果都将是相同的。
因此,编译器会记住那个头文件的“已编译”版本,以避免重复进行编译。
实际上,往往是最初的一组头文件使得差异更大。所以,如果你的每一个源文件都以以下方式开头:
#define XYZZY 42
#include <stdio.h>
#include <stdlib.h>
第一种方法会完整编译,但会记住第三行后的状态。第二种方法可以完全舍弃这三行内容,并加载保存的状态,然后继续编译文件的其余部分。
我第一次看到这个特性是在Windows上,它有一个庞大的windows.h
头文件,相信我,这大大缩短了总体构建时间。