【问题标题】:Are precompiled headers recursive?预编译的头文件是递归的吗?
【发布时间】:2015-07-11 03:55:08
【问题描述】:

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

stdafx.h

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

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

啊.h

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

是否还会为“Bh”和“Ch”生成预编译头文件(以及这两个文件包含的头文件,等等...),还是我必须在其中包含“Bh”和“Ch”我的“stdafx.h”也是?

【问题讨论】:

  • 它将被生成,但如果您使用这些文件中声明的任何内容,最好将 Bh 和 Ch 同时包含在您的 stdafx.h 中,即使它们已经包含在啊
  • @JovanMalinovic:为什么?当然,如果包含 A 并依赖于 B 和 C 的包含是很自然的,那么在预编译头文件的情况下也是很自然的。有什么不同?

标签: c++ c visual-studio visual-c++


【解决方案1】:

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

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

(换句话说:无论您是生成预编译状态还是仅“正常”编译源文件,编译 stdafx.h 的过程都是完全相同的——只是在预编译情况下,编译器会停止在文件末尾。即使它愿意,它也无法区别对待 B 和 C。)

【讨论】:

    猜你喜欢
    • 2012-07-09
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2015-09-20
    • 2020-07-19
    • 2015-01-03
    相关资源
    最近更新 更多