2016-05-16 137 views
8

here,据说:为什么我们使用`#include“stdafx.h”`而不是`#include <stdafx.h>`?

对于#include“文件名”,在同一 目录包含的指令文件的预处理器搜索。此方法通常用于包含程序员定义的头文件,其格式为 。

对于#include预处理程序在实现中搜索 从属方式,通常在由 编译器/ IDE预先指定的搜索目录中。此方法通常用于包含标准库 头文件。

虽然this wiki link表明stdafx.h是一个头文件由visual studio IDE

stdafx.h中预先设计是一个文件,由Microsoft Visual Studio IDE向导生成, 描述两个标准体系和具体项目包括经常使用但几乎不会改变的文件 。

兼容的编译器(例如,Visual C++ 6.0和更新版本)将 预编译该文件以减少整体编译时间。除非编译选项/Yu'stdafx.h未被选中(默认为 ),否则Visual C++将 不会在源文件中的#include“stdafx.h”之前编译任何内容。它假定源代码中的所有代码都已经编译完成并且包含该行 。

stdafx.h中的AFX代表Application Framework eXtensions。 AFX 是Microsoft Foundation Classes (MFC)的原始缩写。尽管默认情况下使用名称stdafx.h,但项目可能会指定一个替代名称 。

然后

为什么我们使用的#include "stdafx.h"代替#include <stdafx.h>

+0

也许**其中** Visual Studio默认生成该标题可能有助于回答您自己的问题。 – WhozCraig

回答

8

A stdafx.h,stdafx.cpp pair由VS从模板生成。它驻留在相同的目录中,其余文件最终结束。您可能最终会专门针对您的项目进行更改。因此,我们使用""而不是<>,因为它与第一个报价描述的目录位于同一目录中。

+0

好的,我在'... \ testMEX \ testMEX \ Debug'和'... \ testMEX \ testMEX'中看到'stdafx.obj','stdafx.h','stdafx.cpp',其中'testMEX'是我的控制台应用程序项目的名称 – sepideh

+0

所以你的意思是1-不同子文件夹中的文件'stdafx.h','stdafx.cpp','handler_stdafx.h','handler_stdafx.cpp'(.NET,ATL,Generic, C:\ Program Files文件(x86)\ Microsoft Visual Studio 10.0 \ VC \ VCWizards \ AppWiz' 2 - 文件'Stdafx.h','StdAfx.h','Stdafx.cpp','StdAfx。 cpp目录的不同部分'C:\ Program Files文件(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ Extensibility Projects' 3-文件'stdafx.h','stdafx.cpp'在不同的子文件夹中'( C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ atlmfc'目录中的文件'stdafx.h', – sepideh

+0

'stdafx.cpp'我的Win7x64机器中的文件(x86)\ Microsoft Visual Studio 10.0 \ DIA SDK \ Samples \ DIA2Dump'目录都是模板。当我们在Visual Studio 2010中启动一个新项目时,会根据项目类型和使用这些模板为其创建一个特殊的stdafx.h文件? – sepideh

4

因为每个项目的stdafx.h不同。正如您所引用的,#include ""将搜索当前项目的路径,这是stdafx.h所在的位置。

使用#include <stdafx.h>将是一个巨大的错误,因为它必须是在库路径(在所有的标准库头所在的位置)。这意味着你不应该修改它,或者它总是保持不变,但是对于不同的项目来说它是不一样的。

因此,尽管它是由Visual Studio生成的,但它是特定于项目的,而不是所有项目。

相关问题