嵌入式C语言中头文件计设规则方法

我是阿梁,最近在负责的项目代码,也算是祖传代码了,里面有很多头文件嵌套的情况,即a.h包含b.h,b.h又包含c.h,c.h又包含d.h......遂找到一份华子的C语言编程规范学习一下,并结合自己的理解写成这篇文章,以规范自己的代码。

1. 头文件嵌套的缺点

依赖:若x.h包含了y.h,则称作x依赖于y,依赖关系会进行传导,如x.h包含y.h,而y.h又包含了z.h,则x.h通过y.h依赖了z.h,依赖将导致编译时间的上升,虽然依赖是不可避免的,但是不良的设计会导致系统的依赖关系无比复杂,使得任意一个文件的修改都要重新编译整个系统,导致编译时间太长。

比如一个 .c 文件包含了 aa.h,一旦 aa.h 被修改,任何直接或间接包含 aa.h 的代码都需要重新编译,如果 aa.h 又包含了 bb.h,那么bb.h 的任何改变都将导致所有包含了 aa.h 的代码重新编译,这就是头文件嵌套导致的编译时间上升的原因。

在一个良好的系统中,修改一个文件,只需要重新编译数个甚至一个文件。

2. 几条规则

以下几条规则可以帮助我们避免不合理的头文件设计:

2.1  头文件放置接口的声明,不适合放置接口实现

头文件是模块的对外接口,头文件中应放置对外部的声明,如对外

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/291552.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

启信宝商业大数据助力全国经济普查

近日,合合信息旗下启信宝收到中国青年创业就业基金会感谢信,对启信宝协同助力全国经济普查和服务青年创业就业研究表达感谢。 第五次全国经济普查是新时代新征程上一次重大国情国力调查,是对国民经济“全面体检”和“集中盘点”,…

武汉星起航:亚马逊受惠国家政策,企业成长与行业发展齐头并进

亚马逊电商平台作为国际知名的跨境电商巨头,在中国市场也展现出了强劲的发展势头。近年来,国家政策对亚马逊电商平台的支持力度不断加大,为企业提供了良好的发展环境和机遇。武汉星起航将探讨国家政策对亚马逊电商平台的重要影响,…

深度思考:雪花算法snowflake分布式id生成原理详解

雪花算法snowflake是一种优秀的分布式ID生成方案,其优点突出:它能生成全局唯一且递增的ID,确保了数据的一致性和准确性;同时,该算法灵活性强,可自定义各部分bit位,满足不同业务场景的需求&#…

QT使用数据库

数据库就是保存数据的文件。可以存储大量数据,包括插入数据、更新数据、截取数据等。用专业术语来说,数据库是“按照数据结构来组织、存储和管理数据的仓库”。 什么时候需要数据库?在嵌入式里,存储大量数据,或者记录数…

【项目技术介绍篇】若依开源项目RuoYi-Cloud后端技术介绍

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过大学刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是&#xff0…

双端队列deque和vector以及list的优缺点比较

参考:https://blog.csdn.net/TWRenHao/article/details/123483085 一、vector vector具体用法详情点这里 优点: 支持随机访问 CPU高速环缓存命中率很高 缺点: 空间不够,便需要增容。而增容代价很大,还存在一定的空间浪费。 头部…

在同一个网站上自动下载多个子页面内容

一、问题现象 第一次遇到这样的问题,如下图: 即在同一个网站上下载多个内容时,第一个内容明明已经正常get到了,但开始第二个页面的查询 以后,原来已经查出的内容就找不到了。 二、解决办法 我不知道大家是不是遇到…

C++项目——集群聊天服务器项目(七)Model层设计、注册业务实现

在前几节的研究中,我们已经实现网络层与业务层分离,本节实现数据层与业务层分离,降低各层之间的耦合性,同时实现用户注册业务。 网络层专注于处理网络通信与读写事件 业务层专注于处理读写事件到来时所需求的各项业务 数据层专…

msvcr110.dll文件丢失要怎么办?教你多种解决msvcr110.dll文件的方法

面对“程序无法启动,因为电脑中缺失msvcr110.dll”的错误提示,你可能会觉得你的工作或者休闲时间被意外中断了,这确实很让人烦恼。这种问题对于很多Windows用户来说并不陌生,但幸运的是,它通常可以通过几个简单的步骤得…

node.js学习(2)

版权声明 以下文章为尚硅谷PDF资料,B站视频链接:【尚硅谷Node.js零基础视频教程,nodejs新手到高手】仅供个人学习交流使用。如涉及侵权问题,请立即与本人联系,本人将积极配合删除相关内容。感谢理解和支持,…

Python3:ModuleNotFoundError: No module named ‘elftools‘

问题背景 问题 ModuleNotFoundError: No module named ‘elftools’ 解决方法 pip3 install pyelftools 成功!!!

哲♂学家带你深♂入理解c语言的编译与链接

目录 前言: 一、翻译环境 二、预处理 三、编译 1.词法分析 2.语法分析 3、语义分析 四、汇编 五、链接 总结: 前言: 编译和链接能够帮我们更好的理解c语言中程序执行前是如何运行的,今天由本哲学家带你深入理解c语言的编译…

iOS - Runloop的运行逻辑

文章目录 iOS - Runloop的运行逻辑1. 苹果官方的Runloop执行图2. Mode里面的东西2.1 Source02.2 Source12.3 Timers2.4 Observers 3. 执行流程3.1 注意点 4. Runloop休眠 iOS - Runloop的运行逻辑 1. 苹果官方的Runloop执行图 2. Mode里面的东西 2.1 Source0 触摸事件处理pe…

Unity Mesh 生成图形(一)

目录 一、概述 二、获取顶点坐标和索引 三、绘制正方形 1.显示顶点坐标 2.顶点坐标的顺序 3.顶点排序 4.绘制最终效果 结束 一、概述 Unity 的 Mesh 是用于表示三维物体的网格数据结构。它是由一系列顶点和三角形组成的网格,用于描述物体的形状和外观。 M…

Java8之接口默认方法

Java8之接口默认方法 一、介绍二、代码1、接口2、实现类3、测试代码4、效果 一、介绍 在Java8中,允许为接口方法提供一个默认的实现。必须用default修饰符标记这样一个方法。默认方法也可以调用其他方法 二、代码 1、接口 public interface PersonService {void…

python 进程、线程、协程基本使用

1、进程、线程以及协程【1】进程概念【2】线程的概念线程的生命周期进程与线程的区别 【3】协程(Coroutines) 2、多线程实现【1】threading模块【2】互斥锁【3】线程池【4】线程应用 3、多进程实现4、协程实现【1】yield与协程【2】asyncio模块【3】3.8版本【4】aiohttp 1. 并发…

EasyDarwin 、ffmpeg 音视频推流拉流;OBS视频推理软件、obs-rtspserver服务器;python读取rtsp流

参考:https://blog.csdn.net/N71FS1/article/details/130019563 一、EasyDarwin ffmpeg ffmpeg 推送音视频流到rtsp流服务器 EasyDarwin 作为rtsp流服务器 (下载:https://www.easydarwin.org/p/easydarwin.html)OBS 直播音视频录…

是德科技keysight N9000B 信号分析仪

181/2461/8938产品概述: 工程的内涵就是将各种创意有机地联系起来,并解决遇到的问题。 CXA 信号分析仪具有出色的实际性能,它是一款出类拔萃、经济高效的基本信号表征工具。 它的功能十分强大,为一般用途和教育行业的用户执行测试…

【Linux】体验一款开源的Linux服务器运维管理工具

今天为大家介绍一款开源的 Linux 服务器运维管理工具 - 1panel。 一、安装 根据官方那个提供的在线文档,这款工具的安装需要执行在线安装, # Redhat / CentOScurl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start…

【学习心得】神经网络知识中的符号解释

这里我对我学到的神经网络知识中,常见的符号做一下记录和总结,方便自己在后面学习中复习。下图二分类识别图像识别猫为例。为了保存一张图片,需要三个矩阵,它们分别对应图片中的红、绿、蓝三种颜色通道,如果图片大小为…