当使用 Microsoft 的优化编译设计时 -stdafx.h
所有包含都应该只出现在这个文件中。或者它只是编译密集型组件?
如果坚持所有“规则”,我会实现更快更高效的编译设计吗?
stdafx.h:
... Standard C++ includes
#include "Base.h"
#include "Super.h"
其中 Base 和 Super 标头和 cpp 文件仅包含stdafx.h
标头
当使用 Microsoft 的优化编译设计时 -stdafx.h
所有包含都应该只出现在这个文件中。或者它只是编译密集型组件?
如果坚持所有“规则”,我会实现更快更高效的编译设计吗?
stdafx.h:
... Standard C++ includes
#include "Base.h"
#include "Super.h"
其中 Base 和 Super 标头和 cpp 文件仅包含stdafx.h
标头
当使用 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 — 不是因为它们是预编译的,而是因为它们被隐式包含。
他们给出了几点,基本上阐述了它打破依赖概念的想法。