首页/新闻资讯/正文详情

嵌入式c语言编程模块源文件和头文件的编写顺序

发布时间:2026/9/27 19:58:31 来源:云帆数科 栏目:资讯中心
嵌入式c语言编程模块源文件和头文件的编写顺序
我在文章“嵌入式模块化编程降低耦合的有效手段”中提到活用static关键字是减少模块与模块之间耦合的重要手段。那么就存在一个问题编写模块源文件和头文件的时候是先写头文件内容还是先写源文件内容呢我以前的写法首先创建模块对应头文件和源文件并包含到项目中。然后先写头文件使用宏定义定义模块相关常量、定义自定义数据类型例如结构体数据类型或枚举数据类型然后使用这些自定义数据类型以及原生数据类型定义全局变量这里定义的全局变量。完成头文件后然后再编写源文件首先包含模块头文件然后定义全局变量最后定义函数完成各个函数内部函数体的内容编写,最后再回到头文件中完成API函数声明编写。我这样写代码的顺序有很多不妥之处因为这样写的代码中的宏定义自定义数据类型全局变量函数声明都默认是全局作用域的也就是无论是当前模块还是其他模块如果包含了头文件定义的所有这些宏定义、数据类型、全局变量、函数理论上都可以使用。这样写的代码没有考虑关键字static的文件内作用域。现在改进的写法首先创建模块对应头文件和源文件并包含到项目中。然后先编写源文件包含相关头文件然后定义宏定义完成模块相关常量定义然后定义自定义数据类型例如结构体数据类型和枚举数据类型然后根据这些自定义数据类型以及原生数据类型定义全局变量全局变量这里分两类静态全局变量也就是全部使用static修饰全局变量以及普通全局变量没有使用static修饰现在叫公共全局变量最后完成函数定义函数定义也分为两类static修饰的静态函数以及普通API函数没有使用static修饰开放给其他模块使用的函数公共全局变量。完成源文件编写后开始编写头文件。如果宏定义类型定义需要在其他模块源文件中使用需要将宏定义、类型定义挪到头文件中然后使用关键字extern修饰公共全局变量声明最后完成函数声明可以省略extern关键字。以上两种编写方法主要区别作用域的不同。方法一更倾向于文件间作用域默认定义的宏定义、类型定义、全局变量、函数在其他模块中都可以访问方法二更倾向于文件作用域默认定义的宏定义、类型定义、全局变量、函数定义大部分都在该模块对应源文件内作用域大部分内容其他模块是不会访问的只有少数部分是其他驱动模块文件中的函数访问的。我看了linux内核源码和uboot源码发现以方式二编写方式更多一些因此以后那种自己编写代码过程中具体过程应该是这样的首先完成头文件和源文件创建然后先编写源文件编写过程中使用static修饰静态全局变量和静态函数如果某些全局变量和函数是全局的在头文件中编写公共全局变量的声明和公共API函数的声明。以源文件为主头文件为次甚至可以先将源文件编写完成后再将需要声明的全局变量和API函数给在头文件中声明。方式二编写方式充分体现了模块编程的“隔离或者隐蔽性”方式二体现了“模块编程以静态全局变量和静态函数为主体公共全局变量和公共API函数为次要”的原则。

相关推荐

医院业态多业态园区的分层计量改造实战
医院业态多业态园区的分层计量改造实战

本文介绍医院能耗的三层计量改造思路:按科室分表定位浪费,院区总表到楼栋再到设备逐级对账,公区与医疗负荷分开挂表,改造按片区推进不停业,并附园区对比与常见问答。关键信息摘要 医院能耗峰谷差异大,按科室… · 2026/9/27 19:58:25

基于图神经网络的物联网固件漏洞静态挖掘技术方案 上
基于图神经网络的物联网固件漏洞静态挖掘技术方案 上

基于图神经网络的物联网固件漏洞静态挖掘技术方案—— 从 ACFG 特征提取到跨架构相似性检测的完整实践路径摘要随着物联网设备的爆发式增长,固件安全问题已成为网络空间安全的重点与难点。本方案面向多架构物联网 ELF 固件,提出一套以静态分析为基础、以… · 2026/9/27 19:58:25

你对稿费极致渴望,钱才能进你口袋
你对稿费极致渴望,钱才能进你口袋

独孤做AI供稿有1年多。 见证过太多学员的崛起。 他们之所以能赚到稿费,拿到结果。 都是对稿费有极度的渴望。 渴望到,放下工作,就在想去链接渠道商,去接单。 接到单子,怎么优化做稿路径,怎么提高效率。… · 2026/9/27 19:58:19

ArcGIS 10.2安装全攻略:从系统准备到1935报错排查
ArcGIS 10.2安装全攻略:从系统准备到1935报错排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 20:35:35

VMware桥接模式失效:VMnet0消失原因与四步修复法
VMware桥接模式失效:VMnet0消失原因与四步修复法

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 20:35:35

从零搭建网址导航站:51goc网址的设计与实现
从零搭建网址导航站:51goc网址的设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 20:35:35

免费开源视频编辑器Concat:真正跨平台的CapCut替代品,完整指南(无水印、无订阅、100%本地)
免费开源视频编辑器Concat:真正跨平台的CapCut替代品,完整指南(无水印、无订阅、100%本地)

免费开源视频编辑器Concat:真正跨平台的CapCut替代品,完整指南(无水印、无订阅、100%本地) 【免费下载链接】Concat The truly free, and open-source cross-platform CapCut replacement (supports MCPs). 项目地址: https://g… · 2026/9/27 20:35:35

工业气体设备目标检测数据集预处理实战指南
工业气体设备目标检测数据集预处理实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 20:35:35

做一个家乡网站有什么可以做,3个实战案例拆解零代码建站流程
做一个家乡网站有什么可以做,3个实战案例拆解零代码建站流程

做一个家乡网站有什么可以做,3个实战案例拆解零代码建站流程 自己不会代码想做网站,是不是觉得特别难?别慌,很多陕西老乡都在做。今天结合3个实战案例,拆解零代码建站全流程。… · 2026/9/27 20:35:28

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码