关注+星标公众号,不错过精彩内容
作者 | strongerHuang
微信公众号 | 嵌入式专栏
好的编程习惯,会直接影响代码的质量,在嵌入式C/C++中,头文件的引用方式和方法有多种,同时一些细节也会影响你代码质量和编译效率。#include使用引号“” 还是 尖括号<> 这个是有规定的。
通常来说:系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找。
用户自定义的文件用双引号括起来,编译器首先会在用户目录下查找。
一个项目通常有多个源文件,你要让编译器找到这些存储在不同路径下的源文件,就必须要让编译器知道源代码所在(路径)位置。
引用头文件路径的方式有多种,在代码中添加路径,在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这种工具,可以不用像上面那样,在源代码中添加路径头文件,只需要在工程中配置编译路径即可。通过菜单 Project -> Options for Taget -> C/C++:

Keil系列教程05_工程目标选项配置(一)
Keil系列教程06_工程目标选项配置(二)
通过菜单 Project -> Options -> C/C++ Compiler:
IAR默认是绝对路径,通常我们需要修改为相对路径。IAR系列教程06_工程节点选项配置(一)
IAR系列教程07_工程节点选项配置(二)
这里顺便说下关于头文件的几个重要内容。
1.防止头文件被重复引用
这个问题对于老司机来说,可能不是什么问题,但很多新手却没搞明白是什么意思。
通常,在某xxx.h头文件中,会有类似如下的一部分代码:
#ifndef _XXX_H#define _XXX_H
#endif
简单来说就是:如果没有包含XXX.h头文件,就包含;否则不包含(即不重复引用)。
有些工程师喜欢把一个工程中所有的.h头文件放在一个全局的头文件(比如 global.h)中,然后,每个.c源文件去引用这个(global.h)头文件。
利:简单方便,不用担心因为漏掉一个 .h 文件而引起错误、警告;弊:只要修改一个.h,工程就需要全局编译,浪费很多时间;
所以,我个人建议不使用这种全局头文件(global.h)来管理头文件。这种做法只是方便了一时,也不利于管理,在几个源文件这种小项目中可能没觉得什么。但是,如果项目越来越大,特别几十上百个源代码,每个源文件代码又比较大的情况下,你修改一个 .h 文件,只能慢慢等待编译。------------ END ------------
后台回复『嵌入式C语言』『嵌入式软件基础知识』阅读更多相关文章。
欢迎关注我的公众号,回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。
点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。