好的编程习惯,会直接影响代码的质量,在嵌入式C/C++中,头文件的引用方法和办法有多种,同时一些细节也会影响你的代码质量和编译效力。
下面就来说说与头文件有关的常识:
嵌入式专栏
1
引号“”和尖括号<>
#include应用引号“” 照样 尖括号<> 这个是有规定的。
平日来说: 体系自带 的头文件用尖括号括起来,如许编译器会在体系文件目次下查找。
用户自定义的文件用双引号括起来,编译器起首会在用户目次下查找。
这里可以参看我之前分享的一篇文 章:#include应用引号“”和尖括号<>的差别?
嵌入式专栏
2
引用头文件路径问题
一个项目平日有多个源文件,你要让编译器找到这些存储在不合路径下的源文件,就必须要让编译器知道源代码地点(路径)地位。
引用头文件路径的方法有多种,在代码中添加路径,在IDE对象中添加路径,还有分绝对路径和相对路径。 下面就来简单说说:
1.源代码中引用头文件
不应用集成开辟情况(IDE),平日会在源代码中添加路径信息,比如在源代码文件中引用头文件:
然则,你会发明上面那个引用有什么差别吗?
一个是绝对路径:
一个是相对路径:
2.IDE对象中引用头文件
我们应用的Keil、IAR这种对象,可以不消像上面那样,在源代码中添加路径头文件,只须要在工程中设备编译路径即可。
比如Keil MDK:
经由过程菜单 Project -> Options for Taget -> C/C++:
Keil MDK默认是相对(工程文件的)路径。
IAR EWARM类似:
通 过菜单 Project -> Options -> C/C++ Compiler:
IAR默认是绝对路径,平日我们须要修改为相对路径。
嵌入式专栏
3
头文件相干内容
这里趁便说下关于头文件的几个重要内容。
1.防止头文件被反复引用
这个问题对于老司机来说,可能不是什么问题,但很多新手却没搞明白是什么意思。
平日,在某xxx.h头文件中,会有类似如下的一部分代码:
# endif
“#”这是一个预处理指令,什么意思呢?
简单来说就是: 假如没有包含XXX.h头文件,就包含;不然不包含(即不反复引用)。
2.全局(全部)头文件
有些工程师爱好把一个工程中所有的.h头文件放在一个全局的头文件(比如 global.h)中,然后,每个.c源文件去引用这个( global.h)头文件。
如许有利也有弊:
利:简单便利,不消担心因为漏掉落一个 .h 文件而引起缺点、警告;
弊:只要修改一个.h,工程就须要全局编译,浪费很多时光;
所以,我小我建议不应用这种 全局头文件(global.h)来治理头文件。
这种做法只是便利了一时,也晦气于治理,在几个源文件这种小项目中可能没认为什么。
然则,假如项目越来越大年夜,特别几十上百个源代码,每个源文件代码又比较大年夜的情况下,你修改一个 .h 文件,只能慢慢等待编译。
在项目比较敢的时刻,这种做法可能会使你心态奔溃。
免责声明:本文系收集转载,版权归原作者所有。如涉及作品版权问题,请与我们接洽,我们将根据您供给的版权证实材料确认版权并付出稿酬或者删除内容。