C++ stdafx.h用于所有头文件或仅用于相关的

C++ stdafx.h用于所有头文件或仅用于相关的,c++,compiler-optimization,stdafx.h,C++,Compiler Optimization,Stdafx.h,当使用Microsoft的优化编译设计时-stdafx.h,所有包含都应该只出现在这个文件中。或者它只是编译密集型组件 如果坚持所有的“规则”,我能实现更快更高效的编译设计吗 stdafx.h: ... Standard C++ includes #include "Base.h" #include "Super.h" 其中,基本头文件和超级头文件以及cpp文件仅包括stdafx.h头文件 当使用微软的快速编译设计--stdafx.h时,所有包含都应该只出现在这个文件中 并非所有的标题都应该

当使用Microsoft的优化编译设计时-
stdafx.h
,所有包含都应该只出现在这个文件中。或者它只是编译密集型组件

如果坚持所有的“规则”,我能实现更快更高效的编译设计吗

stdafx.h:

... Standard C++ includes

#include "Base.h"
#include "Super.h"
其中,基本头文件和超级头文件以及cpp文件仅包括
stdafx.h
头文件

当使用微软的快速编译设计--
stdafx.h
时,所有包含都应该只出现在这个文件中

并非所有的标题都应该放在
stdafx.h
中,正如@drescherjm所评论的那样

此外,即使头出现在
stdafx.h
中,也不会自动意味着它应该从
cpp
文件中消失。至少,根据(虽然不是关于微软,但同样的原则,强调我的):

苹果公司的iOS项目模板开始使用PrimFix.pCH,包括基础和UIKIT。从编译速度的角度来看,这很有意义问题是,人们注意到并说,“这些文件已经隐式包含了。因此我不需要再包含它们。”一旦发现这种副作用,一些程序员开始将更多的头转储到Prefix.pch中。因为嘿,这样你就不必再导入它了。

其目的从“让这个项目尽快编译”转变为“为自己节省一些打字时间”。A反映了这一点,询问“为什么两者都有?”甚至Wikipedia的条目也反映了这一错误结论:“因此,没有必要显式包含上述任何文件。”这种误解是普遍存在的

而且完全错了。

问题在于,要成功编译文件,仅有成对的头(.h)和实现(.m)是不够的。您还需要Prefix.pch-不是因为它们是预编译的,而是因为它们是隐式包含的。


他们给出了几点,基本上阐述了它打破了依赖性概念的观点。

你需要解释
预编译的头不应该最小化**个**的包含。
问题不在于包含一个头多少次?为了实现优化的目标,它需要在哪里(stdafx.h或其他地方)包含该标题compilation@JakeM更新。回答您的“stdafx.h或其他地方”问题:根据给定的建议,
.h
文件应该正常放置,因为它不会是预编译头,此外,为了提高编译速度,
stdafx.h
文件应该放置在
stdafx.h
中。预编译的头文件应该是在巨大的构建中,在那里它实际上是有区别的。嗯,为什么是下一票?我相信你会想要预编译最流行的包含文件。但这是我的看法。我看不出,当一个巨大的预编译头中只有几个定义时,它将如何加速编译。您还可以测量构建性能。存储设备更快,PC也更快。测量10个带预编译头的重建,10个不带预编译头的重建。计算平均构建时间。节省的时间是否重要?再次执行相同操作,只重新编译一个文件。节省的时间是否仍然很重要?是否所有包含都应该只出现在这个文件中?否。我说的是只在这个文件中放置外部库的头,或者至少是通常不会更改的头。