当使用Microsoft的优化编译设计 - stdafx.h
时 - 所有包含的想法应该只出现在此文件中。或者它只是编译密集型组件?
如果坚持所有'规则',我会实现更快更有效的编译设计吗?
stdafx.h中:
... Standard C++ includes
#include "Base.h"
#include "Super.h"
Base和Super标头和cpp文件都只包含stdafx.h
标题
答案 0 :(得分: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它。
目的从“让这个项目尽可能快地编译”转变为“为自己节省一些打字。”Stack Overflow question反映了这一点,问道:“为什么两者都有?”甚至维基百科条目{{3反映了这个错误的结论:“因此,没有必要明确包含上述任何文件。”这种误解很普遍。
这是完全错误的。
...
问题是要成功编译文件,使用配对标头(.h)和实现(.m)已经不够了。你还需要Prefix.pch - 不是因为它们是预编译的,而是因为它们是隐式包含的。
他们给出了几点,基本上阐述了它打破依赖概念的想法。