学过C语言/C++的人可能都知道下面二者都是正确的:

#include <iostream>
#include "iostream"

但是在使用Visual Studio当你在<>中间输入ios的时候,vs会给你推荐符合这个前缀的头文件,如下:

iostream文件在vs visual studio iostream_开发工具


如果你用的是“”,VS则不会给你推荐“iostream”。

iostream文件在vs visual studio iostream_visual studio_02


所以问题来了:是什么决定VS在哪个路径下搜索头文件?答案就是项目属性中的VC++目录。我们先看下VC++里面和头文件引用相关的部分,就是包含目录:

iostream文件在vs visual studio iostream_c++_03


(“VC++目录”下的“包含目录”对应的就是VC++的库文件目录,就是在#include<>时进行搜索的文件夹的集合)

而 iostream 头文件是在 $(VC_IncludePath)的文件夹下面,所以在使用#include<>的时候VS会在这个途径下推荐接近的头文件。从上图可以看到我们创建项目后并没有主动添加路径到这个包含目录里面,而是直接继承了 $(VC_IncludePath)$(WindowsSDK_IncludePath)这两个值。这就解释了#include<>的搜索路径的由来。

那“”中的路径位置又在哪里呢?就在下图中的附加包含目录:

iostream文件在vs visual studio iostream_#include_04


本来附加包含目录应该是空的,现在由于项目需要我在这里添加了新的相对位置(相对于.vcxproj的位置),因此当输入“”时,会显示该文件夹下的文件内容,如图所示。

iostream文件在vs visual studio iostream_开发工具_05

【总结】:“”的搜索路径是保存在C/C++的附加包含目录里,而<>是在VC++目录的包含目录中。所以,你如果不想自己的头文件和一大堆Windows的标准库文件混在一起的话,那就在附加包含目录里添加你自己的include文件夹,并且在使用的时候用#include“”。