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

    文章

    4801

    浏览量

    87182
  • 编程
    +关注

    关注

    88

    文章

    3597

    浏览量

    93611

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

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

收藏 人收藏

    评论

    相关推荐

    labview程序生成exe文件怎么还原

    了程序运行所需的所有指令和数据,但不再以LabVIEW的图形化编程形式存在。 然而,如果你需要修改或查看exe文件背后的LabVIEW逻辑,你可以考虑以下几种方法: 保留原始项目文件
    的头像 发表于 09-04 17:12 1107次阅读

    直流无刷电机调速有几种方法及应用

    直流无刷电机(BLDC)是一种高效、高可靠性的电机,广泛应用于各种工业和消费电子产品。调速是电机控制的一个重要方面,它允许电机在不同的速度下运行,以满足不同的应用需求。直流无刷电机的调速方法
    的头像 发表于 09-03 10:43 1315次阅读

    可重复头文件的固定结构

    年轻人,你可曾记得,在修习C语言的时候,见过这样的字句:在创建头文件的时候,一定要加入保护宏。
    的头像 发表于 08-29 10:23 318次阅读
    可重复<b class='flag-5'>头文件</b>的固定结构

    编译components文件夹内容引入的头文件不对怎么处理?

    最近在移植LVGL,需要自己写RGB驱动 我把LVGL放在components文件,但编译的时候提示缺少esp_lcd下头文件引用 仔细找了一下发现,编译components内容
    发表于 06-17 07:35

    引用外部文件头文件时,如何让VSCODE不提示波浪线错误?

    各位好: 我将常用的组件放在项目文件夹以外的某个地方,尝试在项目内引用文件夹下的组件,失败,在代码无法include相关头文件。我在ma
    发表于 06-07 08:19

    接地电阻的测量有哪几种方法

    接地电阻的测量对于确保电气系统的安全性和可靠性至关重要。存在几种不同的方法来测量接地电阻,每种方法都有其特定的应用场景和技术要求。
    的头像 发表于 05-07 14:17 1.3w次阅读

    请问为什么库函数头文件和寄存器头文件不可共用?

    CLK_CKDIVR=0x01;可是这么编程后就报错iostm8s208mb.h头文件缺少括号,不知道为何库函数头文件与寄存器头文件放一起时哪构成语法错误了;请问我这个把库函数一句一句
    发表于 04-28 06:22

    请问Keil uVision5里STM32L151C8T6怎么引用头文件?

    请问Keil uVision5里STM32L151C8T6怎么引用头文件呢?
    发表于 04-07 07:23

    使用GCC编译STM32F1,makefile引用.a库报错的原因?

    使用STcube生成了一个基于GCC便于的工程且编译完成。 现在想加入自己的.a库文件,进行如下操作: 1)在main函数中加入.a库头文件; 2)引用.a库
    发表于 04-07 06:09

    C语言中的头文件

    #include 指令会指示 C 预处理器浏览指定的文件作为输入。预处理器的输出包含了已经生成的输出,被引用文件生成的输出以及 #include 指令之后的文本输出。
    发表于 02-23 14:06 416次阅读

    改变异步电动机的转速有几种方法

    改变异步电动机的转速有几种方法  改变异步电动机的转速可以通过以下几种方法实现:调节输入电压、改变动态电阻、更换极数、调整定子电阻、调整转子电阻和改变电源频率等。下面将对这些方法进行详细介绍。 1.
    的头像 发表于 02-20 11:43 1417次阅读

    PWM产生的几种方法总结

    PWM产生的方法有很多种,小编将常用的几种产生方法作了一个整理以及分类,下面我们来了解一下。
    的头像 发表于 01-11 09:15 2842次阅读
    PWM产生的<b class='flag-5'>几种方法</b>总结

    一种优雅解决MySQL驱动引用导致GC耗时较长问题的方法

    在之前文章写过 MySQL JDBC 驱动的虚引用导致 JVM GC 耗时较长的问题,在驱动代码(mysql-connector-java 5.1.38版本)
    的头像 发表于 12-20 09:52 899次阅读

    javajvm调优有几种方法

    基本概念。JVM(Java Virtual Machine,Java虚拟机)是Java运行时环境的核心组件,负责解释和执行Java字节码文件。JVM调优的目标是优化JVM的内存使用、垃圾回收、线程管理等方面,以提高应用程序的性能和可用性。 下面是几种常用的JVM调优
    的头像 发表于 12-05 11:11 2066次阅读

    C语言必备知识头文件包含

    头文件在C语言中是非常重要的组成部分。
    的头像 发表于 12-01 18:20 1882次阅读