采用"< >"方式进行包含的头文件表示让编译器在编译器的预设标准路径下去搜索相应的头文件,如果找不到则报错。
例如:VS2008的安装目录\Microsoft Visual Studio 9.0\VC\include下面就包含了标准库的头文件。
第二种方式表示先在工程所在路径下搜索,如果失败,再到系统标准路径下搜索。
所以,特别要注意的是,如果是标准库头文件,那么既可以采用<>的方式,又可以采用" "的方式,而用户自定义的头文件只能采用" "的方式。
例如,如下这种方式是正确的:
#include 效率较高
#include "iostream"效率较低
如下这种方式是不正确的:
#include diy.h是我们自己创建的头文件
#include <filename.h> 这种形式用于包含标准库的头文件。编译器会在标准系统目录中搜索名为filename.h的头文件,并将其包含到程序中。这种形式通常用于包含标准的头文件。
#include "filename.h" 这种形式用于包含自定义的头文件或者非标准的头文件。编译器会首先在当前源文件所在的目录中搜索名为filename.h的头文件,如果找不到,才会在系统目录中搜索。这种形式通常用于包含自定义的头文件或者第三方库的头文件。
因此,两种方式的主要区别在于编译器搜索头文件的路径不同,一个是先在系统目录中搜索,另一个是先在当前源文件目录中搜索。
参考 gcc 官方文档
By default, the preprocessor looks for header files included by the quote form of the directive #include "file" first relative to the directory of the current file, and then in a preconfigured list of standard system directories. For example, if /usr/include/sys/stat.h contains #include "types.h", GCC looks for types.h first in /usr/include/sys, then in its usual search path.
可以清楚的看到,<>搜索已经配置过的标准系统目录.
"" 现在当前当前编辑文件所在的目录中进行搜索,然后搜索已经配置过的标准系统目录
【解析】#include <> 编译器直接从系统类库目录里查找头文件,如果类库目录下查找失败,编译器会终止查找。
#include "" 编译器默认从当前文件所在目录下查找头文件,如果查找失败,再从项目工程中设置的头文件引用目录查找,在 Linux GCC 编译环境下,则一般通过使用 -L 参数指定引用目录,如果项目配置的头文件引用目录中仍然查找失败,再从系统类库目录里查找头文件。
更多C++基础专业知识讲解,点击链接即可查看