0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

编程中引用头文件的几种方法及要点

strongerHuang 来源:strongerHuang 作者:strongerHuang 2021-03-12 17:30 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

好的编程习惯,会直接影响代码的质量,在嵌入式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 文件,只能慢慢等待编译。 在项目比较敢的时候,这种做法可能会使你心态奔溃。

原文标题:软件项目中引用头文件的几种方法及要点

文章出处:【微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 软件
    +关注

    关注

    69

    文章

    5351

    浏览量

    91867
  • 编程
    +关注

    关注

    90

    文章

    3723

    浏览量

    97430

原文标题:软件项目中引用头文件的几种方法及要点

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    20位引脚可编程低功耗Σ-Δ ADC AD7781:特性、应用与设计要点

    20位引脚可编程低功耗Σ-Δ ADC AD7781:特性、应用与设计要点 在电子工程师的日常设计工作,高精度、低功耗的模数转换器(ADC)是实现各种传感器测量和工业控制应用的关键组件。今天,我们
    的头像 发表于 04-01 09:50 387次阅读

    深入解析SGM2531D可编程电流限制开关:特性、应用与设计要点

    的是SGMICRO推出的SGM2531D单通道可编程电流限制开关,深入分析它的特性、应用场景以及设计过程的关键要点,希望能为大家的设计工作提供一些有价值的参考。 文件下载: SGM2
    的头像 发表于 03-24 17:40 554次阅读

    SGM2523可编程电流限制开关:特性、应用与设计要点

    。今天,我们就来深入探讨一下SGM2523的特性、应用以及设计过程要点文件下载: SGM2523.pdf 一、SGM2523的特性亮点 1. 宽输入电压范围与低导通电阻 SGM2523具有
    的头像 发表于 03-24 17:20 571次阅读

    编程振荡器AD2S99:特性、应用与设计要点

    ——AD2S99,介绍它的特性、应用场景,以及在设计需要注意的要点文件下载: AD2S99.pdf 一、AD2S99概述 AD2S99是一款可编程正弦振荡器,旨在为旋转变压器和各
    的头像 发表于 03-23 11:05 161次阅读

    PCB拼板三大细节要点

    提醒:拼板订单,只要PCB设计不是完全相同,哪怕整体外形一致,孔位、走线等细节存在微小差异,属于不同款 PCB。 要点二:阴阳拼板需完整 阴阳拼板(同一拼板正反面为不同设计的单板)因结构特殊,对文件
    发表于 01-23 14:00

    知识分享|连接器焊接方法几种

    连接器是一种用于连接电路的元件,通常由金属制成。下面跟小欣一起看看连接器的焊接方法有哪几种呢?烙铁焊接法是最常见的连接器焊接方法之一。使用烙铁将连接器和电路板焊接在一起,这种方法需要使
    的头像 发表于 01-20 17:57 1414次阅读
    知识分享|连接器焊接<b class='flag-5'>方法</b>有<b class='flag-5'>几种</b>?

    编程增益仪表放大器AD625:特性、应用与设计要点

    编程增益仪表放大器AD625:特性、应用与设计要点 在电子工程师的日常工作,选择合适的放大器至关重要。今天,我们将深入探讨一款功能强大的可编程增益仪表放大器——AD625,了解它的
    的头像 发表于 01-16 10:50 274次阅读

    单片机C语言编程的心得

    的相关程序放在一个C程序文档,称之为一个模块,对应的文件名即为模块名。一个模块通常由两个文档组成,一个为头文件*.h,对模块的数据结构和函数原型进行描述;另一个则为C
    发表于 12-08 07:44

    VSCode + ESP-IDF环境下给ESP32-S3项目添加头文件

    VSCode + ESP-IDF环境下给ESP32-S3项目添加头文件
    的头像 发表于 11-28 07:27 3097次阅读

    有多少种方法可以进行频响曲线测量?

    APx500软件提供了频响曲线的多种测量方法,对一个音频产品的频响特性进行测量分析。如果只用一个测量对一个音频产品进行评价,那这个测量就是频响曲线,APx500软件提供了多种方法可以进行频响曲线测量
    的头像 发表于 11-14 11:29 1184次阅读
    有多少<b class='flag-5'>种方法</b>可以进行频响曲线测量?

    GPIO位输出操作的几种方法分享

    ;    //端口A的位3输出1   PAout03 = 0;    //端口A的位3输出0 5、综述   以上4种方法,1、2两种较为多见;方法3为位带操作,速度最快,但只对具备位带的U有效;方法4是一种新颖的通用
    发表于 11-13 07:50

    基于蜂鸟E203添加完外设后软件头文件添加过程

    对应的头文件,才可以在软件代码里调用。platform.h文件定义了SoC平台相关的宏定义。在里面添加下图所示代码。 AES_CTRL_ADDR _AC(0x10041000,UL)表示AES模块基地址为
    发表于 10-30 06:48

    头文件保护失效,提示变量重复包含,是什么原因导致的?

    我自定了一个头文件,而且使用了头文件保护机制。但是在两个源文件包含相同的头文件时,依然提示某些变量重复包含。想不出来问题在哪里。 这个文件
    发表于 10-09 06:19

    【原创】labview 通过“引用调用“ 的快捷用法,不需编程获取VI引用

    ”选项,如图 点击后,出现了VI路径选择,在这里选择VI路径后,并选择每次调用都重新选择,这样就是直接获取了VI的引用,程序文件移动时,仍然会定位到具体位置的VI,包括生成exe文件时,仍然可以定位到具体的VI, 方便了应用,
    发表于 07-30 17:53

    cypress3014在头文件修改编译后,时间不变,这样头文件的程序有被执行吗?

    你好,请问我在头文件修改编译后,时间不变,这样头文件的程序有被执行吗,怎么解决这个问题
    发表于 05-14 06:50