文件包含

说明

  • 文件包含(文件导入)即在一个源码文件中将另外一个文件包含进来,以方便多文件编程和代码的复用,常见于头文件的包含。
  • C/C++语言使用include宏来实现文件包含。

实现原理

  • 编译是以单个源码文件为单位,编译过程的预处理阶段,预处理器处理到include宏时,会读取include文件中的所有内容拷贝到当前位置,替换掉include宏。

使用

  1. 先从当前路径查找文件,再到PATH环境变量保存的路径查找文件
#include "a.h"
  1. 先从PATH环境变量保存的路径查找文件,再到当前路径查找文件
#include <a.h>

注意点

  1. 文件包含不仅仅可以包含头文件,任何文件都能包含,只是二进制文件或无意义的字符文件会导致编译出错,include时并不会管文件后缀,都是内容拷贝,被包含文件后缀不一定要是.h,.c, .a, .b,甚至没有后缀都没关系。
  2. 文件包含支持多重路径,相对路径,绝对路径等,只要文件系统能访问到就行,例如:
#include "xxx/xxx.h"

C++头文件有后缀.h与无后缀的区别

  • 有后缀的.h文件是c语言风格的头文件,早期c++是扩展的c语言的代码,因此风格也是采用c的,无后缀的头文件是c++风格的头文件,只是因为后期c++做了一些改变,为了和c以及早期的c++头文件区分开。
  • 不管有无后缀本质都一样,都是文本文件,新版本c++ 也是可以包含有后缀的头文件的。

使用方式(个人经验)

  • 头文件的路径有多种写法,例如:相对路径,绝对路径,相对源码根目录路径等,不同写法各有利弊。
  1. 使用源码文件的相对路径,例如:
#include "../xxx.h"
  1. 添加源码根目录到头文件查找目录,头文件包含时使用相对源码根目录的相对路径,例如:
#include "xxx/xxx.h"
  1. 使用头文件的绝对路径,例如:
#include "/home/xxx.h"
  • 导致路径更改的可能情况
  1. 头文件路径发生变化
  2. 源码文件路径发生变化
  3. project整体路径发生变化
  • 利弊
  1. 对于更改1(头文件路径发生变化),不管采用什么写法,引入路径都需要进行对应修改。
  2. 对于更改2(引入头文件的源码路径发生变化),写法1需要进行更改,并且该源码文件中的所有头文件路径都需要进行对应更改,非常麻烦;写法2和3都不需要更改。
  3. 对于更改3(project整体路径发生变化),写法3需要更改,并且所有源码文件中的头文件路径都需要修改,非常麻烦;写法1和写法2不需要修改。
  • 综上所述,我们应该采用写法2,修改的可能性最小。
  • 引申到其它语言,例如:go,java等,都正在采用或者应该采用相对模块根目录的相对路径;改进方式:工程细分为模块,减小模块的粒度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值