11-文件包含_#include
16.5 文件包含: #include
当预处理器发现 #include 指令时,会查看后面的文件名并把文件的内容包含到当前文件中,即替换源文件中的 #include 指令。这相当于把被包含文件的全部内容输入到源文件 #include 指令所在的位置。 #include 指令有两种形式:
#include <stdio.h> ←文件名在尖括号中
#include "mystuff.h" ←文件名在双引号中
在UNIX系统中,尖括号告诉预处理器在标准系统目录中查找该文件。双引号告诉预处理器首先在当前目录中(或文件名中指定的其他目录)查找该文件,如果未找到再查找标准系统目录:
#include <stdio.h> ←查找系统目录
#include "hot.h" ←查找当前工作目录
#include "/usr/biff/p.h" ←查找/usr/biff目录
集成开发环境(IDE)也有标准路径或系统头文件的路径。许多集成开发环境提供菜单选项,指定用尖括号时的查找路径。在UNIX中,使用双引号意味着先查找本地目录,但是具体查找哪个目录取决于编译器的设定。有些编译器会搜索源代码文件所在的目录,有些编译器则搜索当前的工作目录,还有些搜索项目文件所在的目录。
ANSI C不为文件提供统一的目录模型,因为不同的计算机所用的系统不同。一般而言,命名文件的方法因系统而异,但是尖括号和双引号的规则与系统无关。
为什么要包含文件?因为编译器需要这些文件中的信息。例如, stdio.h 文件中通常包含 EOF 、 NULL 、 getchar() 和 putchar() 的定义。 getchar() 和 putchar() 被定义为宏函数。此外,该文件中还包含C的其他I/O函数。
C语言习惯用 .h 后缀表示头文件,这些文件包含需要放在程序顶部的信息。头文件经常包含一些预处理器指令。有些头文件(如 stdio.h )由系统提供,当然你也可以创建自己的头文件。
包含一个大型头文件不一定显著增加程序的大小。在大部分情况下,头文件的内容是编译器生成最终代码时所需的信息,而不是添加到最终代码中的材料。