我理解预编译头的目的是通过使用已经编译过一次的目标文件并将其链接到实际项目来加快编译过程。但我不明白为什么我应该明确强制Visual Studio使用stdafx.h
(Project Properities - > C / C ++ - >预编译头 - >预编译头)?为什么#include "stdafx.h"
不够?
答案 0 :(得分:3)
为什么
#include "stdafx.h"
[...]不够?
因为那只是一个标准的C ++预处理器指令。 * 就编译器而言,它与#include <string>
没有区别。如果你需要附加额外的语义,你必须告诉编译器。
由于似乎存在混淆,Visual Studio如何实现预编译头文件,因此这里是文档链接:Creating Precompiled Header Files。
* 请注意,名称"stdafx.h"
没有什么特别之处,除了它是用于生成PCH的默认标题名称。
答案 1 :(得分:2)
所谓的stdafx.h
应该看起来像普通的头文件。它的名字没有什么特别之处。它不应该自动启用预编译的头文件。
我们的想法是,stdafx.h
将被任何其他编译器视为普通的头文件,并且/当您不知道在MSVC中使用预编译器头时的内容。
你谁应该告诉MSVC编译器你实际上想要启用预编译头文件。这正是您拥有该项目设置的原因。只有当您启用预编译头时,stdafx.h
才会获得其特殊角色,并将从编译器获得特殊处理。它不一定是stdafx.h
。您可以通过在项目设置中指定其他名称将此特殊角色分配给任何其他标题。
事实上,在与微软特定的库或框架无关的项目中看到对AFX的引用会非常奇怪。