使用预编译标头时,每个文件都需要#include "stdafx.h"
吗?或者只有源文件需要包含它。
编辑:此外,我的预编译头文件#includes
有很多STL标头。但是,在我的标题中,我有时会返回返回std::vector
或类似内容的函数,所以无论如何我都需要#include <vector>
。这比包括stdafx.h更糟糕吗?我需要包含单元测试框架的定义。
答案 0 :(得分:4)
每个源文件都需要在任何非注释行之前包含它。标头不需要包含它,因为每个源文件都会在任何其他标头之前包含它。
答案 1 :(得分:1)
您可以设置是否要在项目级别或文件级别使用预编译的头文件。对于项目设置,转到项目属性对话框,然后单击配置属性/ C / C ++ /预编译标题。创建/使用预编译标题有一个选项。您可以通过在文件属性对话框中设置相同的选项来覆盖每个.cpp文件上的项目级别设置。
答案 2 :(得分:0)
所有C / C ++文件都需要将预编译头部置于顶部是 - 如果它为该项目设置。但你可以根据每个C / C ++文件关闭/打开它(Kei说)。
如果要包含标准标头,请将它们全部放在预编译标头中。然后你想要在普通的标题(.h)文件中需要它们。只要所有项目和文件都使用预编译头文件。
答案 3 :(得分:0)
正如其他人所说,只有你的源文件需要包含预编译的头文件。我只想补充一点,在我看来,代码应该在有或没有预编译头文件的情况下正确编译。要实现这一点,标头应该是自包含的,而不是依赖源文件,包括其他所需的标头。我认为预编译头只是加速编译的一种方式,而不是项目中所有使用过的头文件库。