预编译 headers 是递归的吗?

Are precompiled headers recursive?

让我们假设用于创建预编译 headers 的 .h 文件如下所示:

stdafx.h

#include "A.h" //an external library

.. 和 "A.h" 包括一堆其他 headers:

A.h

#include "B.h" //other headers from an external library included by "A.h"
#include "C.h"
//...

是否也会为 "B.h" 和 "C.h" 生成预编译的 header(以及这两个文件包含的 header 文件,等等...) ,还是我必须在我的 "stdafx.h" 中也包含 "B.h" 和 "C.h"?

是的,预编译状态将包括B和C。

预编译由 运行 编译器进行,直到 stdafx.h 结束并将其状态转储到磁盘,然后在编译每个源文件的主体之前恢复该状态。编译器在编译时看到的所有内容 stdafx.h 都会进入该状态。

(换句话说:编译stdafx.h的过程是完全一样的,不管你是生成预编译状态还是只编译一个源文件"normally" - 只是在编译器在文件末尾停止的预编译情况。即使它愿意,它也不能以任何不同的方式对待 B 和 C。)