gpt4 book ai didi

c++ - 在多个文件中使用不带参数的#pragma hdrstop 有什么作用?

转载 作者:可可西里 更新时间:2023-11-01 15:40:23 24 4
gpt4 key购买 nike

#pragma hdrstop(无文件名参数)放在几个源 (cpp) 文件中的实际值(value)(“它做了什么”)是什么?

请注意 MSDN docs对我来说(再一次)像泥巴一样清晰。

编辑/注意:我问这个,因为this answer以及它链接到的文章似乎推荐了这一点。但是我不明白每个编译单元都有一个单独的 pch 文件有什么好处。

最佳答案

原始问题的答案是在没有设置/Yc 或/Yu 的文件中使用 #pragma hdrstop 的目的是它被忽略,因此您可以设置一个构建配置,该构建没有预编译头和其他构建使用预编译 header 构建的配置,您根本不需要更改代码或包含的 header 。

更多细节...

MSDN 上的注释说“hdrstop pragma 使您可以额外控制预编译文件名和保存编译状态的位置。”这是真的,但它到底有多大用处并不是特别明显......

简而言之。

  • 将#pragma hdrstop 放在未使用/Yc 或/Yu 编​​译的源文件中根本不起作用。
  • 如果您为文件设置了/Yu,那么 hdrstop 会告诉编译器丢弃出现 hdrstop 的行之前的所有内容,而是插入预编译的 header 。
  • 如果为文件设置了/Yc,则 hdrstop 意味着保存所有内容的所有编译状态,直到 hdrstop 作为预编译 header 出现的行。

诀窍是使用不带可选头文件名的/Yc 和/Yu;只需选中“使用”或“创建”单选按钮并将“through header”编辑框留空(或编辑项目文件...)。

所以您有 1 个文件,可能称为 PrecompiledHeader.cpp,其中包含您要包含在预编译 header 中的 header ,并且包含文件列表末尾有#pragma hdrstop。这个 ONE 文件是用/Yc 编译的。

然后,在预编译 header 中的包含文件之后,您可以使用#pragma hdrstop 获得所有其他 cpp 文件。这些文件都是用/Yu编译的。

这会导致 PrecompiledHeader.cpp 构建您的(在此示例中)单个 pch 文件和使用该单个 pch 文件的所有其他文件。

这样做的好处是您的文件都不需要包含“全局”预编译头文件构建头文件——因此不需要 stdafx.h 或其他文件。这意味着您可以设置一个构建配置,在没有预编译 header 的情况下构建,其中所有#pragma hdrstop 行都被简单地忽略。

这是“好”的,因为它意味着您可以拥有一个单一的“无预编译”构建配置,让您可以快速开发(您可以更改单个 header 而不强制重建世界)和其他“正常”配置请使用预编译头文件。

关于c++ - 在多个文件中使用不带参数的#pragma hdrstop 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7282853/

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