c – 预编译头文件和预编译二进制文件之间的区别是什么

Wiki引用提到某些头文件有时可能包含大量源代码,因此将它们作为预编译头文件可以节省编译时间.
https://en.wikipedia.org/wiki/Precompiled_header

如果预编译头可以包含已编译的源代码,那么它与预编译的二进制文件有何不同.

最佳答案
C定义了“翻译单元”的概念.翻译单元是翻译开始的锚点,并且程序通常包括若干这样的翻译单元.哪些单元作为“转换单元”传递给编译器实际上取决于IDE,makefile和其他配置中的设置.但非正式地,大多数配置都将.cpp和.c-文件作为翻译单元.

为了使它更容易,我们可以将翻译单元视为编译器生成二进制文件的一种方式,然后链接器将多个二进制文件组合到一个程序中.

因此,头文件通常不被配置为转换单元,并且它们通常不会自己生成二进制文件,即使它们包含源代码.它们被认为是从翻译单元导入的,并将与它们一起编译.

如果这样的头文件包含许多源代码,它们将被包含在几个翻译单元中,那么(预)编译它们一次并在中间结果中保留尽可能多的信息是有意义的,这样编译实际翻译单位更快.这节省了时间,但“中间二进制”是内部的而不是暴露的.

但是,根据其中的源代码的内容和类型,头文件与其他源代码文件无法区分.您可以将“头文件”作为转换单元传递给编译器,编译器实际上会从中生成“普通”二进制文件.它实际上只是通常不会被声明为编译的根.

希望有所帮助.

转载注明原文:c – 预编译头文件和预编译二进制文件之间的区别是什么 - 代码日志