#include <>和#include ““的区别

#include< file >编译程序会先到标准函数库中找文件
#include”file” 编译程序会先从当前目录中找文件

在C程序中包含文件有以下两种方法:
(1)用符号“<”和“>”将要包含的文件的文件名括起来。这种方法指示预处理程序到预定义的缺省路径下寻找文件。预定义的缺省路径通常是在INCLUDE环境变量中指定的,请看下例:
INCLUDE=C:\COMPILER\INCLUDE;S:\SOURCE\HEADERS;
对于上述INCLUDE环境变量,如果用#include语句包含文件,编译程序将首先到C:\COMPILER\INCLUDE目录下寻找文件;如果未找到,则到S:\SOURCE\HEADERS目录下继续寻找;如果还未找到,则到当前目录下继续寻找。

(2)用双引号将要包含的文件的文件名括起来。这种方法指示预处理程序先到当前目录下寻找文件,再到预定义的缺省路径下寻找文件。

对于上例中的INCLUDE环境变量,如果用#include“file”语句包含文件,编译程序将首先到当前目录下寻找文件;如果未找到,则到C:\COMPILER\INCLUDE目录下继续寻找;如果还未找到,则到S:\SOURCE\HEADERS目录下继续寻找。

#include语句一般用来包含标准头文件(例如stdio.h或stdlib.h),因为这些头文件极少被修改,并且它们总是存放在编译程序的标准包含文件目录下。#include“file”语句一般用来包含非标准头文件,因为这些头文件一般存放在当前目录下,你可以经常修改它们,并且要求编译程序总是使用这些头文件的最新版本。

 

另外,需要注意的地方:

1、#include "..." 在编译器编译时,先在使用include的源文件所在目录找, 而不是编译器当前工作目录找

2、 #include <...> 所谓的"从系统目录找", 那么"系统目录"到底有哪些, 怎么看呢?

以gcc为例, 在命令行运行 echo | gcc -E -v -

   bash-3.2$ echo | gcc -E -v -
   * * *
   #include "..." search starts here:
   #include <...> search starts here:
   /usr/lib/gcc/i686-pc-linux-gnu/4.8.2/include
   /usr/local/include
   /usr/lib/gcc/i686-pc-linux-gnu/4.8.2/include-fixed
   /usr/include
   End of search list.

还可以通过-I参数把目录添加到系统目录中

   bash-3.2$ echo | gcc -E -v -I. -
   * * *
   #include "..." search starts here:
   #include <...> search starts here:
   .
   /usr/lib/gcc/i686-pc-linux-gnu/4.8.2/include
   /usr/local/include
   /usr/lib/gcc/i686-pc-linux-gnu/4.8.2/include-fixed
   /usr/include
   End of search list.

3、下面这种情形下( 注意: 1.c的 #include <hdr.h> ), 会包含那个hdr.h ?

   bash-3.2$ tree
   |-- sub
   |   |-- 1.c
   |   `-- hdr.h
   `-- hdr.h
   bash-3.2$ cat sub/1.c
   #include <hdr.h>
   bash-3.2$ gcc -c -I. sub/1.c

会包含最外层的hdr.h,也就是说#include <>在系统目录中找不到指定的头文件,下一步的搜索路径列表是基于编译器工作路径的.

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值