来自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>
?
答案 0 :(得分:8)
VS从模板生成stdafx.h
,stdafx.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扩展名的不同用法。