2009-06-26 66 views
2

使用预编译头文件时,每个文件是否需要#include "stdafx.h"?或者只有源文件需要包含它。MSVC预编译头文件:哪些文件需要#include“stdafx.h”?

编辑:另外,我的预编译头文件#includes很多STL头。但是,在我的头文件中,我有时会返回std::vector或类似的东西,所以我需要#include <vector>。这比包含stdafx.h更糟吗?我需要包含我的单元测试框架的定义。

回答

4

每个源文件都需要在任何非注释行之前包含它。标题不需要包含它,因为每个源文件都会在其他标题之前包含它。

+0

但是如果来自另一个项目的源文件包含此头文件呢?在这种情况下,第一个项目的stdafx.h将不包含在内。 – 2009-11-12 20:11:23

+0

每个项目只允许一个预编译头文件,并且每个_source file_(不包括来自其他头文件!)都必须首先包含它。如果你想使用不同预编译头文件的两个项目,没问题 - 只要它们是单独的项目。他们每个人都会得到自己的头文件,没有冲突。 – bdonlan 2009-11-12 21:20:05

0

您可以设置是否在项目级别或文件级别使用预编译头文件。对于项目设置,转到项目属性对话框,然后单击配置属性/ C/C++ /预编译头。有一个创建/使用预编译头的选项。通过在文件属性对话框上设置相同的选项,可以覆盖每个.cpp文件上的项目级别设置。

0

你所有的C/C++文件都需要在最上面安装预编译头文件是 - 如果它为该项目设置的话。但是你可以根据每个C/C++文件关闭/打开它(Kei说的)。

如果您有要包含的标准头文件,请将它们全部放在预编译头文件中。然后你想在正常的头文件(.h)文件中使用它们。只要所有项目和文件都使用预编译头文件。

0

正如其他人所说,只有你的源文件需要包括预编译头。我只补充一点,在我看来,代码应该正确地编译,不管是否带有预编译头文件。为了达到这个目的,标题应该是自包含的,不要依赖包括其他所需标题的源文件。我看到预编译头只是为了加快编译速度,而不是作为项目中所有已使用头的存储库。