gpt4 book ai didi

c++ - 预编译头文件可以像库一样使用吗?

转载 作者:太空狗 更新时间:2023-10-29 20:03:29 24 4
gpt4 key购买 nike

是否可以像使用库一样使用预编译头文件?例如,我可以创建一个包含预处理器的 header ,如下所示:

#include <iostream>
#include <string>
#include "boost_headers.hpp"

将其编译成 PCH,然后分发 PCH 而无需分发用于创建它的头文件?

最佳答案

没有。预编译 header 有多个方面使它们不适合作为分发格式。

  • 它们不稳定。对编译器或build设置的任何更改都会使预编译 header 失效。
  • 它们不是模块化的。 PCH 必须是从源文件(甚至通过命令行)包含的第一件事。作为推论,您不能包含多个 PCH。换句话说,如果您将您的库作为 PCH 分发,您基本上是在说您的库是用户唯一需要的东西。

问题是 PCH 通常(在 MSVC 和 GCC 中,Clang 略有不同)实现为内部编译器状态的简单转储。加载 PCH 意味着用 PCH 中的状态替换编译器状态。没有中间地带 - 编译器无法将 PCH 中的状态合并到它们的当前状态中。

Clang 的 PCH 实现方式不同,但仍然必须是第一件事,因为如果在 PCH 之前出现任何东西,C++ 编译模型仍然意味着 PCH 可能无效。 Clang 的模块支持基本上描述了一种允许合并 PCH 的更改编译模型。 (正确进行合并还涉及很多工作。)

关于c++ - 预编译头文件可以像库一样使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28693782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com