为什么在C++中我们使用`#include "stdafx.h"`而不是`#include <stdafx.h>`?

7
这里得知:
对于#include "filename",预处理器会在包含指令的文件所在目录中搜索。通常用于包含程序员定义的头文件。
对于#include <filename>,预处理器会以实现相关的方式进行搜索,通常在编译器/IDE预先指定的搜索目录中进行搜索。通常用于包含标准库头文件。
这个维基链接则表明stdafx.h是由Visual Studio IDE预先设计的头文件。
因此, 为什么我们使用#include "stdafx.h"而不是#include <stdafx.h>

也许 Visual Studio 默认生成该头文件的位置可以帮助你回答自己的问题。 - WhozCraig
3个回答

8

在VS中,stdafx.hstdafx.cpp是由模板生成的一对文件。它们位于与其它文件相同的目录下。你可能需要为你的项目专门修改它。因此,我们使用""而不是<>,正是因为它与你描述的第一个引用在同一目录中。


好的,我看到...\testMEX\testMEX\Debug...\testMEX\testMEX中有stdafx.objstdafx.hstdafx.cpp。其中testMEX是我的控制台应用项目的名称。 - Sepideh Abadpour
你的意思是1-不同子文件夹(.NET, ATL, Generic, MFC)下的C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\VCWizards\AppWiz中的文件stdafx.hstdafx.cpphandler_stdafx.hhandler_stdafx.cpp;2-在目录C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensibility Projects的不同部分中的文件Stdafx.hStdAfx.hStdafx.cppStdAfx.cpp;3-在目录C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc的不同子文件夹(include、lib、src)中的文件stdafx.hstdafx.cpp;4-文件stdafx.h - Sepideh Abadpour
我的Win7x64机器中位于C:\Program Files (x86)\Microsoft Visual Studio 10.0\DIA SDK\Samples\DIA2Dump目录下的stdafx.cpp全都是模板。当我们在Visual Studio 2010中开始一个新项目时,会基于项目类型创建特殊的stdafx.h文件,并使用这些模板。 - Sepideh Abadpour
我在代码中包含了 #include "stdafx.h",但是出现了错误'cannot open source file "stdafx.h"'和'Cannot include file: "stdafx.h": No such file or directory。有人知道我该如何解决吗? - T.Doe

4
因为每个项目的 stdafx.h 都不同。正如你引用的那样,#include "" 会搜索当前项目的路径,这也是 stdafx.h 的位置。
使用 #include <stdafx.h> 将是一个巨大的错误,因为它必须位于库路径(所有标准库标头都位于此处)。这意味着您不应该修改它,或者它总是保持不变,但对于不同的项目来说永远不是相同的。
所以尽管它是由 Visual Studio 生成的,它是特定于项目的,而不是所有项目通用的。

0
通常情况下,对于给定的包含文件 name.h,语法 #include <name> 保留给标准库,而 #include "name.h" 则用于用户定义的文件。这里,“用户”可以是任何实现非标准特性的开发人员,例如针对特定编译器包的开发人员。
因此,预处理器按照系统设置指定的适当路径搜索包含文件。请注意方括号和引号之间的区别,以及 *.h 扩展名的不同用法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接