stdafx.h:我什么时候需要它?

时间:2009-03-24 07:04:01

标签: c++ visual-c++ header precompiled-headers stdafx.h

我看到很多代码,包括stdafx.h。说,我想要预编译的标题。我手动包含所有必需的系统标头。在这种情况下,还有其他任何理由我应该知道我需要stdafx.h吗?

6 个答案:

答案 0 :(得分:17)

如果您不想使用预编译头文件,那么使用标准包含文件是没有意义的 - 这将减慢包含它的每个文件的构建速度并导致它们包含他们不需要的额外内容。摆脱它,只需要包含他们需要的标题。

答案 1 :(得分:2)

即使没有预编译的标头,stdafx.h也可以很方便,因为它可以为所有文件组合标题包含和定义。

您当然可以选择在每个文件中重复所有这些定义。 stdafx.h不是绝对必要的。

答案 2 :(得分:2)

stdafx.h只是另一个头文件。如果你跌倒了,你不需要它随意不包括它并从项目中删除它。

然而,像stdafx.h这样的文件通常完全适用于预编译的头文件,并且不能在每个源文件中手动包含所有内容。

答案 3 :(得分:2)

你可以使用预编译的头文件(这是一件好事)而不使用stdafx.h(我也可以使用它)。我只能访问VC ++ 6.0,但是在那里转到Project Settings | C / C ++ | Precompiled Headers并选择“自动使用预编译头”,但将“编译通过”框留空。

答案 4 :(得分:1)

正如其他人所说:如果你不需要预编译的头文件,你真的不需要stdafx.h。实际上,将它用于分组共同包含是非常糟糕的做法。

事实上,即使使用预编译头文件,最好在stdafx.h(或precompiled.h或其他任何你想要调用它)之后包含你的进程实际需要的头文件 - 以及预编译头文件中的#ifdef magic关闭PCH的使用。

为什么呢?为了检查您的模块依赖性。能够禁用PCH可以捕获是否包含必要的模块,然后您可以通过解析.cpp和.h文件(当然不包括PCH头文件)编写工具来检查模块的相互依赖性。

答案 5 :(得分:0)

我知道这是一个老话题,但我想我会把自己的意见传递给读者。我在2017年发现了这一点,所以我确定我不是唯一会在这里的人。

使用预编译的标题有一个优点,可能会被其他人忽略,因为他们多年来一直在使用他们的实践。 C ++标准发展很快。您可以使用PCH文件而不是将漫画包含在您可能需要的20个文件中,或者使用PCH文件,编译器必须做更少的工作,这样可以为每个人创造幸福的面孔。您还可以将常用宏放在那里,例如VERIFY,ASSERT和智能类对象。不要把你的类标题放在那里,对它来说没有意义,而是你需要在很多地方全局使用的标准库,比如我提到的宏。

基本上意识到这一点,通过在所需的每个文件中包含所需的标头,例如iostream,string和vector,您实际上每次都将其编译为内联文件。包括"预编译"标题,这个名字应该响铃。