-2

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

4

2 回答 2

3

为什么#include "stdafx.h"[...] 还不够?

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

由于似乎存在混淆,Visual Studio 如何实现预编译头文件,这里有一个文档链接:创建预编译头文件


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

于 2017-02-10T20:09:16.270 回答
2

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

这个想法是stdafx.h任何其他编译器都将其视为普通头文件和/或当您不使用 MSVC 中的预编译器头文件时。

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

事实上,在与 Microsoft 特定库或框架无关的项目中看到对 AFX 的引用将是一件很奇怪的事情。

于 2017-02-10T20:09:56.700 回答