预编译头文件,就是将头文件事先编译成一种二进制的中间文件。比如下面代码:
gcc -c a.h a.c
其中,由于 a.h 被当成 *.c 文件一样进行编译,生成了一种二进制中间格式的文件(a.h.gch)。
a.h 文件 和 a.c 文件分别被解析,合并,并通过编译生成了 a.o 文件。虽然 a.o 文件中包含了很少的头文件代码,头文件的大小并没有对 a.o 文件的规模产生很大影响,但是对头文件的解析话费的时间,却不容小觑。如果生成 *.gch 文件,再次包含该头文件时就不用再次解析。
该类文件的特性:
- 生成的是被解析完成的二进制中间件
- 编译
*.gch
文件时,所用到的*.h
文件必须在当前目录下,因为编译头文件不会过环境变量或者-l
进行路径搜索 *.gch
文件和所对应的*.h
没有必要的联系,也就是说对 *.h 文件进行修改时*.gch
文件不会自动修改,需要重新编译。因此通常情况下,不轻易改变的头文件才会编译成中间件。