#include指令(c/C++)

#include 指令调用预处理器视为已指定文件的内容,象这些内容出现在源程序于指令出现的点。

#include  "path-spec"
#include  <path-spec>

备注

可以将常数,然后宏定义。中包括文件中使用 #include 指令添加这些定义为所有源文件。 包含文件可用于合并的外部变量和复杂数据类型的说明也很有用。 在为此目的而创建的包含文件只需一次定义和命名类型。

路径规范 是目录规范后可选的文件名。 文件名必须命名现有文件。 路径规格的 语法取决于程序编译的操作系统。

有关如何对 c. C/C++ 应用程序的程序集的信息编译 /clr,请参见 #using

两种语法形式导致的替换指令由指定的整个内容包含文件。 两种形式之间的区别是预处理器搜索头文件的顺序,当路径不完全指定时。 下表显示了两种语法形式之间的差别:

语法形式

操作

带引号的窗体

预处理器按以下顺序搜索包含文件:

  1. 在的目录中包含 #include 语句的文件相同。

  2. 在以前打开的任何内容请包含文件并在打开的顺序相反。 搜索自上次打开包含文件的内容启动并通过先打开包含文件的内容继续。

  3. 沿每个 /I 编译器选项指定的路径。

  4. 沿包括环境变量指定的路径。

角度括号窗体

预处理器按以下顺序搜索包含文件:

  1. 沿每个 /I 编译器选项指定的路径。

  2. 在从命令行编译,沿着由包含环境变量指定的路径时。

,当找到具有给定名称,一个文件预处理器停止搜索。 如果指定包含文件的完整,明确的路径规格在双引号 () 之间,路径规格并忽略标准内容仅的预处理器搜索。

如果用双引号括起来的文件名是不完整路径规格,预处理器首先搜索 “父”文件内容。 父文件是包含 #include 指令的文件。 例如,因此,如果包括名为在名为 file1的文件中的 file2 的文件, file1 是父文件。

包含文件可以 “嵌套”;即 #include 指令可以出现在另一个 #include 指令指定的文件中。 例如, file2,上面,可以包含 file3。 在这种情况下, file1 是 file2 父级,但为 “祖父项” file3。

当将时文件嵌套,并从命令行进行编译,目录搜索从父文件的目录并从头开始时通过所有祖父项文件内容执行。 因此,搜索以相对于包含的内容源当前进程。 如果找不到该文件,搜索移动到 /I 编译器选项指定的内容。 最后,包括环境变量指定的目录下搜索。

从开发环境 (ide),包括环境变量被忽略。 若要设置目录搜索包含文件 (此信息也适用于 LIB 环境变量。),请参见 VC++ 目录,项目,选项 " 对话框

使用尖括号,下面的示例演示文件包括:

#include <stdio.h>

此示例将名为 STDIO.H 文件的内容读入源程序。 尖括号导致预处理器搜索包含环境变量指定的目录 STDIO.H,在搜索 /I 编译器选项指定的内容之后。

使用这个带引号的窗体,下面的示例演示文件包括:

#include "defs.h"

此示例向 DEFS.H 指定文件的内容读入源程序。 双引号意味着预处理器搜索首先包含父源文件的目录。

嵌套包含文件可以扩展 10 个级别。 在嵌套 #include 处理,预处理器继续到封闭文件包含在原始源文件中插入。

Microsoft 专用

若要查找可包括在内的源文件,预处理器首先搜索 /I 编译器选项指定的内容。 如果 /I 选项不存在或不会失败,预处理器使用包含环境变量查找任何包括在尖括号中的文件。 包含环境变量和 /I 编译器选项可以包含分号分隔的多个路径 (;)。 如果多个目录显示为 /I 选项的一部分或在包含环境变量中,预处理器按它们的出现顺序搜索它们。

例如,命令

CL /ID:\MSVC\INCLUDE MYPROG.C

导致预处理器搜索目录 D: \MSVC\INCLUDE for include files such as STDIO.H。 命令

SET INCLUDE=D:\MSVC\INCLUDE
CL MYPROG.C

具有相同的效果。 如果两个设置搜索请失败,错误生成的一编译器错误。

如果文件名对于 (如包含冒号的路径的包含文件完全指定 (, F: \MSVC\SPECIAL\INCL\TEST.H),预处理器遍历路径。

对于将作为 #include 路径规格指定的文件,目录搜索从父文件的目录开始遍历所有祖父项文件内容随后执行。 因此,搜索以相对于包含源文件的目录包含处理的 #include 指令。 如果没有祖父项文件,并且未找到文件,搜索继续,就象文件名在尖括号括起。

特定于 Microsoft 的结尾

请参见

参考

预处理器指令