1.
< >引用的是编译器的类库路径里面的头文件 " "引用的是你程序目录的相对路径中的头文件 假如你编译器定义的自带头文件引用在C:\Keil\c51\INC\下面 则#include<stdio.h>引用的就是C:\Keil\c51\INC\stdio.h这个头文件 不管你的项目在什么目录里,C:\Keil\c51\INC\stdio.h这个路径就定下来了 一般是引用自带的一些头文件:stdio.h、conio.h、string.h、stdlib.h等等之类的。。 假如你的项目目录是在D:\Projects\tmp\ 则#include "my.h" 引用的就是D:\Projects\tmp\my.h这个头文件 一般是用来引用自己写的一些头文件 如果使用" ",它是会先在你项目的当前目录查找是否有对应头文件 如果没有,它还是会在对应的引用目录里面查找对应的头文件 意思就是,使用#include "stdio.h"如果你项目目录里面,没有stdio.h这个头文件,它还是会定位到C:\Keil\c51\INC\stdio.h这个头文件的
2.
#include <stdio.h> 只搜索系统类库,不搜索本地。Linux下类库目录是 /usr/include/
对于linux gcc 编译器,他会再从其他路径里找,见: 3#inlcude "stdio.h" 先搜索本地,如果本地存在就不再搜索,本地不存在就搜索系统类库。
3.
刚刚翻了翻gcc查找include的头文件的优先级,首先会在当前目录下找,假如没有找到,会在以下几个地方找: 1.编译的时候指定 2.gcc的specs里 3.使用-I参数指定的路径 4.gcc环境变量设置(C_INCLUDE_PATH) 而在这四个当中,-I参数指定的路径优先级最高。在gcc的手册里是这么说的: -I dir Add the directory dir to the list of directories to be searched for header files. Directories named by -I are searched before the standard system include directories. If the directory dir is a stan- dard system include directory, the option is ignored to ensure that the default search order for sys- tem directories and the special treatment of system headers are not defeated . 使用-I参数指定的路径会在标准的系统include路径之前被搜索。 简单写一行shell,就能看到include的搜索的顺序了。 echo 'main(){}' | gcc -E -v - #include "..." 搜索从这里开始: #include <...> 搜索从这里开始: /usr/local/include /usr/lib/gcc/i386-redhat-linux/4.1.2/include /usr/include 加上-I参数 echo 'main(){}' | gcc -E -v -I /home/chengcheng/mmsapp/include -,结果则是 /home/chengcheng/mmsapp/include /usr/local/include /usr/lib/gcc/i386-redhat-linux/4.1.2/include /usr/include