include包含文件查找的顺序 .

简介: 从microsoft网站上找到关于#include Directive (C/C++)的相关问题解释如下: The #include directive tells the preprocessor to treat the contents of a specified file as if t...

从microsoft网站上找到关于#include Directive (C/C++)的相关问题解释如下:

The #include directive tells the preprocessor to treat the contents of a specified file as if those contents had appeared in the source program at the point where the directive appears.


Syntax Form

Action

Quoted form

The preprocessor searches for include files in the following order:

  1. In the same directory as the file that contains the #include statement.

  2. In the directories of any previously opened include files in the reverse order in which they were opened. The search starts from the directory of the include file that was opened last and continues through the directory of the include file that was opened first.

  3. Along the path specified by each /I compiler option.

  4. Along the paths specified by the INCLUDE environment variable.

Angle-bracket form

The preprocessor searches for include files in the following order:

  1. Along the path specified by each /I compiler option.

  2. When compiling from the command line, along the paths that are specified by the INCLUDE environment variable.

按照上述,二者的区别在于:当被include的文件路径不是绝对路径的时候,有不同的搜索顺序。对于使用双引号“”包含的include文件,搜索的时候按以下顺序:

 

1.在包含当前include指令的文件所在的文件夹内搜索;

2.如果上一步找不到,则在之前已经使用include指令打开过的文件所在的文件夹内搜索,如果已经有多个被include的文件,则按照它们被打开的相反顺序搜索;

3.如果上一步找不到,则在编译器设置的include路径内搜索;

4.如果上一步找不到,则在系统的INCLUDE环境变量内搜索。

而对于使用半角尖括号<>包含的include文件,搜索的时候按以下顺序:

1.在编译器设置的include路径内搜索;

2.如果是在命令行中编译,则在系统的INCLUDE环境变量内搜索。

对于非绝对路径的文件使用上述两种include指令搜索时,一旦找到include命令所指定的文件,编译器就停止搜索。但是如果被include的文件是绝对路径的文件,比如 #include "D:\Program Files\OpenCV1.0\cv\include\cv.h" ,被包含的cv.h文件路径是绝对路径,这种情况下编译器直接按照这个给出的绝对路径是搜索。

以下为一个使用尖括号<>include的例子:

#include <stdio.h>

在这个例子里,我们向源程序代码中包含stdio.h文件,由于使用的是尖括号<>,预处理器搜索的时候,先在编译器设置的include路径内搜索,如果找不到,就在系统的INCLUDE环境变量内搜索。

以下为一个使用双引号" "include的例子:

    #include "defs.h"
	在这个例子里,我们向源程序代码中包含defs.h文件,由于使用的是双引号" ",预处理器搜索的时候,使用了这条指令的父文件所在文件夹内搜索,所谓的父文件,就是这条include指令所在的文件,如果找不到,在父文件的父文件所在文件夹内搜索,如果仍然找不到,则在编译器设置的include路径内搜索,如果还找不到,就在系统的INCLUDE环境变量内搜索。

 

 

from:http://blog.csdn.net/godenlove007/article/details/7531521

目录
相关文章
|
编解码 安全 Android开发
低功耗蓝牙LE Audio Profile 详细介绍
2019年底,蓝牙官方组织SIG发布了蓝牙5.2版本的核心协议,其中增加了一个重要的特性---LE Audio。蓝牙的应用协议都是从应用层到物理层完整包含的协议,LE Audio也不例外。但蓝牙5.2核心协议仅仅定义了蓝牙LE的链路层传输Audio的方式,上层协议以及完整的LE Audio规范迟迟未出,近日,蓝牙官方组织释放了LE Audio较为完整的规范文档。
低功耗蓝牙LE Audio Profile 详细介绍
|
机器学习/深度学习 算法 算法框架/工具
为什么使用C++进行机器学习开发
C++作为一种高性能语言,在某些性能要求极高或资源受限的场景下也具有非常重要的地位。C++的高效性和对底层硬件的控制能力,使其在大规模机器学习系统中发挥重要作用,尤其是当需要处理大数据或实时响应的系统时。
472 3
|
12月前
|
供应链 监控 数据挖掘
电商API接口:开启供应链管理高效协同与价值提升新通道
电商API接口作为连接电商平台与供应链各环节的关键桥梁,通过实时库存管理、订单自动化、物流追踪、供应商协同等应用,显著提升供应链效率与协同能力,助力企业实现数字化转型与高效运营。
|
小程序 Java 关系型数据库
weixin049校园外卖平台设计与实现+ssm(文档+源码)_kaic
本文介绍了一款校园外卖平台的设计与实现过程。该平台采用Java的SSM框架进行后台管理开发,使用MySQL作为本地数据库,并通过微信小程序为用户提供便捷的操作界面。系统包括管理员、用户和商家三个角色,功能涵盖个人中心、用户及商家管理、菜品分类与信息管理、订单处理等。管理员可在浏览器上登录管理后台数据,用户与商家则通过微信小程序注册登录,分别实现订餐与菜品管理功能。此平台具备界面清晰、操作简单、功能齐全的特点,有助于提升校园外卖管理的效率与规范性。
STM32:GPIO控制LED闪烁代码部分(内含配置图+代码+代码注释)
STM32:GPIO控制LED闪烁代码部分(内含配置图+代码+代码注释)
1259 0
STM32:GPIO控制LED闪烁代码部分(内含配置图+代码+代码注释)
|
数据安全/隐私保护
APP - 支付宝怎么延时转账?能否撤回转账?
APP - 支付宝怎么延时转账?能否撤回转账?
4207 0
APP - 支付宝怎么延时转账?能否撤回转账?
|
开发工具 git
蓝易云 - 解决git clone时出现Failed to connect to 127.0.0.1 port 1573问题
希望这些信息能帮助你解决问题。如果问题仍然存在,可能需要检查你的网络设置或者联系你的网络管理员。
459 3
|
存储 开发工具 C#
Git Extensions:一个.NET开源的 Git 图形用户界面(GUI)工具
Git Extensions:一个.NET开源的 Git 图形用户界面(GUI)工具
979 0
|
数据采集 数据可视化 数据挖掘
Python 数据分析实战:使用 Pandas 进行数据清洗与可视化
【10月更文挑战第3天】Python 数据分析实战:使用 Pandas 进行数据清洗与可视化
1088 0
|
编解码 Linux
FFmpeg开发笔记(十)Linux环境给FFmpeg集成vorbis和amr
在Linux环境下,为FFmpeg添加对AAC、MP3、OGG和AMR音频格式的支持,需安装libogg、libvorbis和opencore-amr库。首先,从官方源下载各库的最新源码,如libogg-1.3.5、libvorbis-1.3.7和opencore-amr-0.1.6,然后解压并依次执行`./configure`、`make`和`make install`进行编译安装。接着,在FFmpeg源码目录中,使用`./configure`命令重新配置,并重新编译安装FFmpeg。最后,验证FFmpeg版本信息确认已启用ogg和amr支持。
855 0
FFmpeg开发笔记(十)Linux环境给FFmpeg集成vorbis和amr