关注+星标公众,不错过精彩内容

作者 | strongerHuang

微信公众号 | 嵌入式专栏

好的编程习惯,会直接影响代码的质量,在嵌入式C/C++中,头文件的引用方式和方法有多种,同时一些细节也会影响你代码质量和编译效率。

下面就来说说与头文件有关的知识;

嵌入式专栏

1

引号“”和尖括号<>

#include使用引号“” 还是 尖括号<> 这个是有规定的。

通常来说:系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找

#include <xxx.h>

用户自定义的文件用双引号括起来,编译器首先会在用户目录下查找。

#include "xxx.h"

这里可以参看我之前分享的一篇文章:#include使用引号“”和尖括号<>的区别?

嵌入式专栏

2

引用头文件路径问题

一个项目通常有多个源文件,你要让编译器找到这些存储在不同路径下的源文件,就必须要让编译器知道源代码所在(路径)位置。

引用头文件路径的方式有多种,在代码中添加路径,在IDE工具中添加路径,还有分绝对路径和相对路径。下面就来简单说说:

1.源代码中引用头文件

不使用集成开发环境(IDE),通常会在源代码中添加路径信息,比如在源代码文件中引用头文件:

#include "/strongerhuang/robot/project/bsp/bsp_uart.h"
#include "../bsp/bsp_uart.h"

但是,你会发现上面那个引用有什么区别吗?

一个是绝对路径:

#include "/strongerhuang/robot/project/bsp/bsp_uart.h"

一个是相对路径:

#include "../bsp/bsp_uart.h"

2.IDE工具中引用头文件

我们使用的Keil、IAR这种工具,可以不用像上面那样,在源代码中添加路径头文件,只需要在工程中配置编译路径即可。

比如Keil MDK:

通过菜单 Project -> Options for Taget -> C/C++:

Keil MDK默认是相对(工程文件的)路径。

这里推荐扩展阅读(工程选项配置)相关的文章:

Keil系列教程05_工程目标选项配置(一)

Keil系列教程06_工程目标选项配置(二)

IAR EWARM类似:

通过菜单 Project -> Options -> C/C++ Compiler:

IAR默认是绝对路径,通常我们需要修改为相对路径。

这里推荐扩展阅读(工程选项配置)相关的文章:

IAR系列教程06_工程节点选项配置(一)

IAR系列教程07_工程节点选项配置(二)

嵌入式专栏

3

头文件相关内容

这里顺便说下关于头文件的几个重要内容。

1.防止头文件被重复引用

这个问题对于老司机来说,可能不是什么问题,但很多新手却没搞明白是什么意思。

通常,在某xxx.h头文件中,会有类似如下的一部分代码:

#ifndef _XXX_H
#define _XXX_H#endif

“#”这是一个预处理指令,什么意思呢?

简单来说就是:如果没有包含XXX.h头文件,就包含;否则不包含(即不重复引用)

2.全局(全部)头文件

有些工程师喜欢把一个工程中所有的.h头文件放在一个全局的头文件(比如 global.h)中,然后,每个.c源文件去引用这个(global.h)头文件。

这样有利也有弊:

利:简单方便,不用担心因为漏掉一个 .h 文件而引起错误、警告;

弊:只要修改一个.h,工程就需要全局编译,浪费很多时间;

所以,我个人建议不使用这种全局头文件(global.h)来管理头文件。

这种做法只是方便了一时,也不利于管理,在几个源文件这种小项目中可能没觉得什么。

但是,如果项目越来越大,特别几十上百个源代码,每个源文件代码又比较大的情况下,你修改一个 .h 文件,只能慢慢等待编译。

在项目比较敢的时候,这种做法可能会使你心态奔溃。

------------ END ------------

后台回复『嵌入式C语言』『嵌入式软件基础知识』相关文章。

欢迎关注我的公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

欢迎关注我的视频号:

点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。 

软件项目中引用头文件的几种方法及要点相关推荐

  1. python中的main函数可以被其他文件调用么_Python中在脚本中引用其他文件函数的实现方法...

    在导入文件的时候,Python只搜索当前脚本所在的目录,加载(entry-point)入口脚本运行目录和sys.path中包含的路径例如包的安装地址.所以如果要在当前脚本引用其他文件,除了将文件放在和 ...

  2. Linux系统中运行.sh文件的几种方法

    在Linux系统中执行.sh文件的几种方法: 1. cd到.sh文件所在的目录,然后执行./xxx.sh   [前提:该./sh文件要有可执行的权限,chmod u+x xxx.sh]  2. 在任何 ...

  3. matlab中读文件的行数_Matlab中读取txt文件的几种方法

    Matlab中读取txt文件的几种方法 一.纯数据文件(没有字母和中文,纯数字) 对于这种txt文档,从matalb中读取就简单多了 例如test.txt文件,内容为"17.901 -1.1 ...

  4. matlab中如何读写txt,Matlab中读取txt文件的几种方法

    Matlab中读取txt文件的几种方法 matlab读取文本文件的几种函数: 1.load--适合读取纯数据文本: 2.importdata--只读取数据,自动省略数据格式前后的字符,超大文件不适合: ...

  5. python中字符串怎么引用_Python:字符串中引用外部变量的3种方法

    方法一: username=input('username:') age=input('age:') job=input('job:') salary=input('salary') info1='' ...

  6. spark 读取ftp_在 Shell 中下载 ftp 文件的几种方法

    FTP 是 File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于 Internet 上的控制文件的双向传输.同时,它也是一个应用程 ...

  7. 看板管理方法在软件项目中的意义,以及与Scrum方法的区别

    一.什么是看板 看板是一种适用于实施敏捷和 DevOps 软件开发的系统框架,核心在于工作的全方位可视化以及基于工作的实时沟通.通过看板中各工作项的直观展示,可以让团队成员清晰了解各项工作的状态及进展 ...

  8. MyEclipse将Java项目打包成jar文件的三种方法

    2019独角兽企业重金招聘Python工程师标准>>> 方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 "MANIFEST.MF", 由于 ...

  9. myeclipse打包java文件_MyEclipse将Java项目打包成jar文件的三种方法

    方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 "MANIFEST.MF", 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFE ...

最新文章

  1. R语言图形用户界面数据挖掘包Rattle:加载UCI糖尿病数据集、并启动Rattle图形用户界面、数据集变量重命名,为数据集结果变量添加标签、数据划分(训练集、测试集、验证集)、随机数设置
  2. 切换node版本 nvm 的基本使用 -- 以及安装公司特有的镜像源
  3. 损失函数,梯度下降与牛顿法
  4. mybatis generator Unknown system variable 'query_cache_size' 的解决方法
  5. linux mysql 磁盘空间_磁盘空间满了之后MySQL会怎样
  6. C语言内存泄露很严重,如何应对?
  7. 【华为云技术分享】深度详解GaussDB bufferpool缓存策略
  8. 鸿蒙应用开发--事件
  9. zabbix系列zabbix3.4监控mysql5.7
  10. Mac新手比较容易犯的一些错误
  11. python门店会员管理系统_python---CRM用户关系管理
  12. echart制作环形图
  13. 《基于多支持向量机综合的电力系统暂态稳定评估》总结
  14. zemax中非序列添加相位面_zemax非序列照明技巧汇编
  15. QQ突遭大规模盗号!自动给好友群发不雅照,官方回应来了!
  16. Codeforces Round #727 (Div. 2)
  17. 【今日分享】官方实例用python调用OpenAI tahcTPG的APIkey生成智能问答
  18. AD那些事 切割板子形状,线的弧度转换
  19. csvn-httpd启动报AH00094错解决办法
  20. WebView-WebView状态和加载方式

热门文章

  1. Mac如何录屏 同时录内置声音
  2. 怎么才能做好团队管理|方法论加模型案例(附常用管理模型、人员架构图)
  3. Type interface com.aiit.mapper.BrandMapper is not known to the MapperRegistry.解决办法
  4. 使用证件照研究院接口实现制作证件照
  5. 【全开源+免费更新】doodoo.js快速入门教程 1
  6. 文墨绘学怨气里长大的孩子
  7. 微信小程序腾讯服务器地址要购买吗,微信小程序JavaScript SDK
  8. 智能手机屏幕失灵了,怎么办?
  9. Zbrush 4R7 P3中给类模型怎么快速隐藏
  10. 二十九、K8s最小服务漏洞3-gVisor沙箱