预编译标头和普通包含

Precompiled headers and normal includes

本文关键字:包含 编译      更新时间:2023-10-16

使用预编译头文件时,当我在常规头文件中包含我已经包含在预编译头中的头文件时,它是否有区别(或产生不良影响)?

或者换句话说:当我在另一个头文件中包含一个头 x 同时在我的预编译头文件中包含 x 时,这是否会阻止预编译头提供的优化启动?

(一般)。将要发生的是,在编译期间,如果您使用的是预编译标头,并且编译器发现预编译表单中已经存在的标头,它将选择使用预编译形式。

事实上,继续使用包含是一种很好的做法,就好像您从一开始就没有预编译标头一样。如果您将来关闭预编译标头或修改其中的标头列表,或者其他人决定执行不使用 PCH 的自己的源代码外构建,这会有所帮助。

预编译标头是编译时优化。代码必须像没有预编译标头一样编写。对这些标头的支持可以完全使用编译器的参数添加,即通过调整构建过程并在构建系统无法为您生成一个标头时添加"捕获全部"标头(它真的应该,这些天!

TL;DR:预编译标头是您在构建脚本中抛出的开关。而已。它们不应泄漏到构建脚本之外。