原创 绝对路径与相对路径的区别(相对路径的理解)

2018-11-2 19:42 2208 18 4 分类: MCU/ 嵌入式 文集: 记录学习的感悟
本人之前一直理解不了相对路径的概念与使用方法,做项目一直使用的是用绝对路径(在项目中添加头文件包含或者引用路径),也一直没出什么问题,就没怎么在意。
直到最近在做项目的过程中,由于在自己办公电脑上开发的项目经常要拷贝到其他电脑上去执行,造成绝对路径(存放的盘、文件夹位置)发生变化,项目修改后编译无法通过,每次都需要重新修改包含路径,非常麻烦,这才意识到使用绝对路径的弊端。通过自己的小半天(大部分帖子都是抄来抄去或者无参考价值)的资料查找和验证,终于弄懂了相对路径是怎么一回事,特此记录下来。也帮助被此问题困扰的同行理解。

绝对路径:指文件所在文件夹的具体位置。具体到哪个盘,那个文件之下。比如,我的桌面有一个C++文件夹,它的绝对路径为--C:\Users\document\Desktop\C++。

图1

相对路径:对于一个文件来说,它的具体位置将失去意义。它只针对引用它或者被它引用的文件有意义。下面举个栗子说明。
假如现在我有一个工程文件夹Prj_Example,Prj_Example文件夹下有2个子文件夹,文件夹A和文件夹B,A下有一个头文件A.H和子文件夹a,子文件夹a中有头文件a.H。B下有一个头文件B.H和文件夹b,子文件夹b中有头文件b.H。如下图:
图2. A.H的位置

图3. a.H的位置

现在,假如a.H想要引用A.H。A.H相对a.H来说,它和a.H的上一级目录a在同一个路径之下,所以a.H引用A.H时必须返回至上一级A才能寻找到A.H的位置,在a.H中需添加语句#include“../A.H”。反之,A.H引用a.H,A.H与a.H的上一级目录a处于同级目录,所以只需添加语句#include"a/a.H"即可。
其中, ../代表返回上一级, ../../代表返回上二级,依次类推
更进一步,如果a.H要引用B.H。B.H相对a.H来说,它的上一级目录B和a.H的上二级目录A在同一个路径之下,所以a.H引用B.H时首先必须返回至二者最近的共同目录下,再进行寻址才能寻找到B.H的位置。所以,在a.H中需添加语句#include“../../B/B.H”。.
同理可知,如果a.H想引用b.H,根据以上分析,只需添加语句#include“../../B/b/b.H”即可。
不知道有没有分析清楚,初次理解可能有点费劲,建议不懂多看两遍,最好建个工程引用一下可以方便理解。有问题欢迎留言,实践出真知,共勉。

文章评论0条评论)

登录后参与讨论
相关推荐阅读
1069886355_608129668 2018-11-19 22:30
快速实现乘、除运算的算法(适用于单片机等计算能力有限的系统)。 ...
从学习单片机以来,就一直被强调,单片机计算能力有限,进行数据乘、除操作十分耗费资源。 本人最近在研究51操作系统,接触底层比较多,昨晚突发奇想,想要设计基于位操作的乘、除算法。经过仔细思考和规律分析...
1069886355_608129668 2018-10-31 17:02
基于VS2015的MFC设计中保证列表框始终显示最底行的方法
由于项目需要,使用VS2015的MFC功能编写上位机,过程中使用了 CListCtrl 控件,随着控件中item数量的增加,每次刷新界面之后,都会导致列表界面始终从最上行开始显示,给上位机使...
1069886355_608129668 2018-08-23 10:36
C80C51F340可以通过编译却无法程序却无法运行的原因
前段时间在做一个基于C8051系列单片机的一个项目,将遇到的问题记录一下。1、在编写C8051f340单片机程序的过程中,全局变量的数量不能定义太多。否则会出现可以通过编译,但在仿真、运行过程中发现无...
我要评论
0
18
1
2
3
4
5
6
7
8
9
0
关闭 热点推荐上一条 /4 下一条