0

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

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

stdafx.h:

... Standard C++ includes

#include "Base.h"
#include "Super.h"

其中 Base 和 Super 标头和 cpp 文件仅包含stdafx.h标头

4

1 回答 1

0

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

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

此外,即使标题出现在 中stdafx.h,也并不意味着它应该从cpp文件中消失。至少,根据4 Ways Precompiled Headers Cripple Your Code(虽然不是关于微软,但同样的原则,强调我的):

Apple 的 iOS 项目模板从 Prefix.pch 开始,包括 Foundation 和 UIKit。从编译速度的角度来看,这很有意义。问题是人们注意到并说,“那些文件已经被隐式包含了。所以我不需要再次包含它们。” 在发现这种副作用后,一些程序员开始将更多的头文件转储到 Prefix.pch 中。因为嘿,那么您不必再次#import 它。

目的从“让这个项目尽可能快地编译”转变为“节省一些打字时间”。堆栈溢出问题反映了这一点,问:“为什么两者都有?” 甚至 Wikipedia 的前缀标题条目也反映了这个错误的结论:“因此,没有必要明确包含上述任何文件。” 这种误解很普遍。

这是完全错误的。

……

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

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

于 2016-01-04T23:00:04.977 回答