联系
Knight's Tale » 技术

关于#include 与 #include" " 的区别

2009-09-26 13:10

C/C++ code使用尖括号的话,编译时会先在系统include目录里搜索,如果找不到才会在源代码所在目录搜索;使用双引号则相反,会先在源代码目录里搜索。这就意味着,当系统里(如/usr/include/里)有一个叫做math.h的头文件,而你的源代码目录里也有一个你自己写的math.h头文件,那么使用尖括号时用的就是系统里的;而使用双引号的话则会使用你自己写的那个。

所以建议: 使用系统里提供的头文件时使用尖括号 使用自己编写的头文件时使用双引号。

Linux环境下的C++头文件搜索路径方式就是按照上面的方法来的。

但是,VS2005环境与与Linux环境的设定是有点不一样的!

在VS2005环境下,我们#include <自己的头文件> 会提示: 

fatal error C1083: Cannot open include file: '******.h': No such file or directory

这是因为当编译器是这样来寻找这个头文件的: 先在系统include目录下查找,发现查找不到,然后在项目的#include目录下查找,发现也查找不到(因为VS2005环境默认的项目#include目录为空). 所以就会出现错误.

我们只要将项目的头文件搜索路径加入 "." (当前路径) 那么,就可以编译成功了.

#include <KnightDream.h> 这种写法就可以编译成功了。

总结一下:

#include <>的默认路径是系统头文件目录  其次是项目头文件路径(VS2005下默认为空)
#include " " 的默认路径是与CPP文件同目录的路径,还有项目头文件路径(VS2005下默认为空) ,  其次才是系统头文件路径

这样一来,当我们#include "iostream" 的速度肯定比不上 #include 的速度

#include <KnightDream.h> 的速度肯定比不上 #include "knightDream.h" 的速度