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

时间:2016-05-16 15:36:05

标签: c++ visual-studio-2010 include header-files directive

来自here,据说:

  

对于#include "filename",预处理器会搜索相同的内容   directory作为包含指令的文件。这个方法是   通常用于包含程序员定义的头文件。

     

对于#include <filename>预处理器在实现中搜索   依赖方式,通常在预先指定的搜索目录中   编译器/ IDE。此方法通常用于包括标准库   头文件。

虽然this wiki link表明stdafx.h是由visual studio IDE

预先设计的标头文件
  

stdafx.h是一个由Microsoft Visual Studio IDE向导生成的文件,   它描述了标准系统和项目特定的包含文件   经常使用,但几乎没有变化。

     

兼容的编译器(例如,Visual C ++ 6.0和更新版本)将   预编译此文件以减少整体编译时间。 Visual C ++会   在源代码中的#include“stdafx.h”之前没有编译任何东西   文件,除非编译选项/Yu'stdafx.h'未选中(通过   默认);它假设源中的所有代码都包括在内   line已经编译好了。

     

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

然后

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

3 个答案:

答案 0 :(得分:8)

VS从模板生成stdafx.hstdafx.cpp对。它驻留在同一目录中,其余文件最终结束。您可能最终会专门为您的项目更改它。因此,我们使用""代替<>,因为它与您的第一个引号所在的目录位于同一目录中。

答案 1 :(得分:4)

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

使用#include <stdafx.h>会出现 巨大的 错误,因为它必须位于库路径中(所有标准库标题都位于此处)。这意味着你不应该修改它,或者它总是保持不变,但对于不同的项目它永远不会相同。

因此即使它是由Visual Studio生成的,它也是特定于项目的,而不是所有项目。

答案 2 :(得分:0)

通常,对于给定的包含文件name.h,语法#include <name>保留给standard libraries,而#include "name.h"用于用户定义的文件。在那里,'user'可能意味着任何开发人员实现非标准功能,比如针对特定的编译器包。

因此,预处理器按照系统设置指定的合适路径搜索包含文件。不仅要注意括号和引号之间的区别,还要注意* .h扩展名的不同用法。