头文件引用的区别

#include 指令指示预处理器处理指定文件的内容, 就好像这些内容在源程序中出现在指令出现的位置一样。


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

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

path-spec是一个文件名 (可选) 前面有一个目录规范。文件名必须为存在的文件命名。
path-spec的语法取决于编译程序的操作系统

有关如何在使用/clr 编译的 c++ 应用程序中引用程序集的信息, 请参见 #using。

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

语法形式           含义

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


 1.在包含 #include 语句的文件所在的目录中。
 2.在以前打开的所有文件的目录中, 以相反的顺序打开它们。搜索从上次打开的包含文件的目录开始,   并通过首先打开的包含文件的目录继续进行。
3.沿着每个/I 编译器选项指定的路径。
4.沿INCLUDE 环境变量指定的路径。

尖括号形式     预处理器按以下顺序搜索包含文件:
       1.沿着每个/I 编译器选项指定的路径。
2.从命令行编译时, 沿着包含环境变量指定的路径。

一旦找到具有给定名称的文件, 预处理器就停止搜索。如果在双引号 ("") 之间为包含文件指定完整的、明确的路径规范, 则预处理器只搜索该路径规范并忽略标准目录。

如果用双引号括起来的文件名是不完整的路径规范, 则预处理器首先搜索 "父" 文件的目录。父文件是包含 #include 指令的文件。例如, 如果在名为 file1 的文件中包含名为 file2 的文件, 则 file1 是父文件。

包含文件可以是 "嵌套的";即, #include 指令可以出现在由另一个 #include 指令命名的文件中。例如, 上面的 file2 可以包括 file3。在这种情况下, file1 仍然是 file2 的父母, 但将是 file3 的 "祖父母"。

当包含文件是嵌套的, 并且从命令行进行编译时, 目录搜索从父文件的目录开始, 然后遍历任何祖文件的目录。因此, 搜索相对于包含当前正在处理的源的目录开始。如果找不到该文件, 搜索将移动到由/I 编译器选项指定的目录。最后, 将搜索包含环境变量所指定的目录。

在开发环境中, 将忽略包含环境变量。若要设置搜索包含文件的目录 (此信息也适用于 LIB 环境变量), 请参阅 vc++ 目录、项目、选项对话框。

下面的示例显示了使用尖括号的文件包含:

#include <stdio.h>
本示例添加名为 STDIO.h 的文件的内容到源程序。尖括号导致预处理器搜索 STDIO 的 INCLUDE 环境变量指定的目录, 在搜索由/I 编译器选项指定的目录后。

下面的示例使用带引号的表单显示文件包含:

#include "defs.h"
本示例添加由定义指定的文件的defs.H 到源程序。双引号意味着预处理器首先搜索包含父源文件的目录。
包含文件的嵌套可以持续多达10层。处理嵌套 #include 后, 预处理器将继续将包含文件的内容插入原始源文件中。


Microsoft 特定
要查找包含源文件, 预处理器首先搜索由 "/I 编译" 选项指定的目录。如果 "/I" 选项不存在或失败, 则预处理器使用 INCLUDE 环境变量在尖括号中查找任何包含文件。包含环境变量和/I 编译器选项可以包含以分号 (;) 分隔的多个路径。如果多个目录显示为 "/I" 选项的一部分或包含在 "包括" 环境变量中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值