预编译标头和普通包含
Precompiled headers and normal includes
使用预编译头文件时,当我在常规头文件中包含我已经包含在预编译头中的头文件时,它是否有区别(或产生不良影响)?
或者换句话说:当我在另一个头文件中包含一个头 x 同时在我的预编译头文件中包含 x 时,这是否会阻止预编译头提供的优化启动?
否
(一般)。将要发生的是,在编译期间,如果您使用的是预编译标头,并且编译器发现预编译表单中已经存在的标头,它将选择使用预编译形式。
事实上,继续使用包含是一种很好的做法,就好像您从一开始就没有预编译标头一样。如果您将来关闭预编译标头或修改其中的标头列表,或者其他人决定执行不使用 PCH 的自己的源代码外构建,这会有所帮助。
预编译标头是编译时优化。代码必须像没有预编译标头一样编写。对这些标头的支持可以完全使用编译器的参数添加,即通过调整构建过程并在构建系统无法为您生成一个标头时添加"捕获全部"标头(它真的应该,这些天!
TL;DR:预编译标头是您在构建脚本中抛出的开关。而已。它们不应泄漏到构建脚本之外。
相关文章:
- 编译包含字符串的代码时遇到问题
- g++编译包含的头:没有这样的文件或目录
- 包含模板文件的递归会导致编译失败
- 即使不包含其标头,如何成功向前声明的类编译?
- 为什么更改包含 psapi.h 的顺序会产生编译错误?(标识符 BOOL 未定义)
- 如何确定integer_sequence在编译时是否包含给定的数字?
- 编译包含指向模板函数的指针的初始值设定项列表时,gcc 出错,但 clang 不出错
- BGL:当包含 random_spanning_tree.hpp 时,对strong_components的调用无法编译
- 为什么我需要包含<compare>标头才能编译 <=>?
- 包含来自 boost 1.73.0 的read_graphviz_new.cpp无法编译
- 为什么具有静态存储持续时间的同一内联变量在包含在 VS2017 编译的两个翻译单元中时会构造和销毁两次
- 编译时条件包含.分段标头与包括整个实现
- 当包含成员函数名为errno和cerrno时,g++7编译错误
- 编译包含LLVM API标头的C++文件时出错
- 包含 cmath 标头时出现 cmake 编译错误
- 在我的 CLR 项目中添加包含会导致无法在启用 /clr 的情况下编译 WLR
- 为什么包含任意 STL 标头可以解决这些编译错误?
- 在编译期间包含未使用的代码
- GCC - 包含编译标志的宏
- 为什么许多编译语言不包含编译时反射?