为什么不包含 stdafx.h 对 VisualStudio 来说还不够?

Why isn't include stdafx.h not enough for VisualStudio?

我了解到预编译头的目的是通过使用已经编译过一次的目标文件来加快编译过程,link它到实际项目中。但我不明白的是,为什么我应该明确强制 Visual Studio 使用 stdafx.h(项目属性 -> C/C++ -> 预编译头文件 -> 预编译头文件)?为什么 #include "stdafx.h" 还不够?

Why isn't #include "stdafx.h" [...] enough?

因为那只是一个标准的 C++ 预处理器指令。* 就编译器而言,它与 #include <string> 没有什么不同。如果你需要附加额外的语义,你必须告诉编译器。

由于似乎存在混淆,Visual Studio 如何实现预编译的 headers,这里是 link 文档:Creating Precompiled Header Files.


* 请注意,名称 "stdafx.h" 没有什么特别之处,除了它是用于 header 的默认名称生成 PCH。

所谓的stdafx.h应该看起来像一个普通的header文件。它的名字没有什么特别之处。它不应该自动启用预编译 headers.

想法是,当您不使用预编译器headers 时,stdafx.h 将被任何其他编译器and/or 视为普通的header 文件在 MSVC 中。

应该是 告诉 MSVC 编译器你实际上 想要 启用预编译的 header。这正是您拥有该项目设置的原因。并且只有当您启用预编译 headers 时,stdafx.h 才会获得其特殊作用,并会得到编译器的特殊处理。而且不一定是stdafx.h。您可以通过在项目设置中指定不同的名称,将此特殊角色分配给任何其他 header。

事实上,在与 Microsoft-specific 库或框架无关的项目中看到对 AFX 的引用会很奇怪。