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

c语言常量、变量按照功能划分

发布时间:2026/9/25 17:57:49 来源:云帆数科 栏目:资讯中心
c语言常量、变量按照功能划分
最近我在写stm32单片机的程序也阅读以前同事写的代码以及参考uboot内核源码、linux内核源码来编写。我现在的思路是分模块进行编程将整个项目分成一个个独立的模块每一个模块对应一个源文件和头文件在源文件和头文件中定义数据类型以及对应变量往往是全局变量使用宏定义对模块相关的恒定不变的常数进行编码然后根据子函数在父函数中的调用方式编写风格一、风格二、风格三这三种风格的函数。我在前面写的几篇文章中对三种风格函数定义选择进行了大量描述在这里就不再赘述了今天要讲解的重点是数据结构毕竟数据结构算法共同组成程序。数据结构我以前对数据结构认识是这样的定义自定义类型然后用这些类型定义全局变量自定义类型包括结构体类型、数组类型、共用体类型等不过我现在有了更深的认识那就是除了包含以上这些之外数据结构还要包含使用宏定义对常量进行编码以及原生类型定义的变量容易被遗忘定义的宏定义原生数据类型定义的变量也是属于数据结构。模块化编程过程就是用c语言对模块细节进行编写的过程。需要完成宏定义编码、函数定义、数据类型定义、数据类型变量定义原生数据类型和自定义数据类型这4大步骤4大步骤缺一不可。其中如果按照功能对数据结构变量、宏定义进行划分大致可以划分为两大类记录错误、状态旗标的常量或者变量记录真正有效数据的常量或者变量。任何一种常量或者变量按照功能划分都可以分成这2大类。常量记录错误状态旗标的常量记录真正数值的常量例如// 记录错误状态旗标的常量 #define DIR_FORWARD 1 #define DIR_BACKWARD 2 #define DIR_STOP 3 #define MOTOR_RUNNING 1 #define MOTOR_STOPPED 2 #define SUCCESS 0 #define FAILED 1 // 记录真实有效数据的常量 #define PI 3.1415926 #define LIMIT_CNT 2变量记录错误状态旗标的变量记录真正有效数据的变量例如// 记录错误状态旗标的变量 uint8_t motor_state; uint8_t motor_run_dir; uint8_t limit_state; // 记录真正数据的变量 ADC_HandleTypeDef hadc1; CAN_HandleTypeDef hcan1; TIM_HandleTypeDef htim6;记录错误状态旗标的变量主要用于记录程序或者模块“运行时动态状况”其值会随着程序执行流程频繁变化通常使用的类型为原生数据类型int boot、enum或小型结构体数值变更具有时序依赖性何时改、谁改很重要,该变量多用于“控制流程”。记录真正有效数据的变量用于存储程序运行所需相对稳定的信息资源通常作为多个函数共享的数据源或者配置基准。数据类型多为复合型struct、array、union、pointer,内容更倾向于信息载体而非控制流更接近于“共享资源”的概念。编写代码时“记录错误状态旗标的变量”容易被忽略掉也就是只记住定义真正有效数据的类型和变量以及函数而忽略这种经常使用原生数据类型记录错误状态旗标的全局变量这也是考虑细节不细致导致的。其他引伸不相关LSP:语言服务协议在vscode中大纲窗口中列表的变量或者函数是不区分声明或者定义的c语言中的修饰关键字extern、auto、static是无法在大纲窗口中显示的这是由于vscode软件要符合LSP协议要求协议中要求这些修饰类关键字不显示这样做也是为了满足支持多语言时的共性。函数名命名规范如果看过uboot源码、linux内核源码的话会发现大部分函数名都是由三个以内单词组成的。之所以这样保持在三个单词以内是因为函数名虽然表示一段话但是这段话不能太复杂太啰嗦如果发现3个单词无法将函数所要实现的含义表达清楚说明该函数还是太复杂了需要再分成多个子函数每一个子函数名由3个以内单词组成。函数名命名一定程度上也说明了函数需要完成的工作如果发现函数名无法清晰明了的由3个单词以内组成说明该函数组织不合理不太适合写成一个函数需要重新规划拆分成多个子函数让多个函数共同完成原函数实现的流程过程。

相关推荐

moto 中 AWS DirectConnect Mock 实现解析:已支持 API 清单、内部机制与使用边界
moto 中 AWS DirectConnect Mock 实现解析:已支持 API 清单、内部机制与使用边界

Mock测试 【免费下载链接】moto A library that allows you to easily mock out tests based on AWS infrastructure. 项目地址: https://gitcode.com/gh_mirrors/mo/moto 点击查看 免费下载 本文基于 moto 仓库中 DirectConnect 服务的文档页与源码,系统介绍 moto… · 2026/9/25 17:57:43

桌面端CRM实战:从Excel迁移到客户管理系统的完整指南
桌面端CRM实战:从Excel迁移到客户管理系统的完整指南

前两个月,团队还挤在 Excel 和微信聊天记录里管客户的时候,我就萌生了换掉这套打法的念头。Excel 里躺着上千行客户名单,能对上的跟进记录没几条,微信里的沟通记录又基本没法翻。后来我花了一个周末把 DeskcommCRM 搭起来&#xf… · 2026/9/25 17:57:43

JupyterHub 独立部署 Proxy:让 Hub 重启不再中断用户连接的配置与实践
JupyterHub 独立部署 Proxy:让 Hub 重启不再中断用户连接的配置与实践

后端微服务 【免费下载链接】jupyterhub Multi-user server for Jupyter notebooks 项目地址: https://gitcode.com/gh_mirrors/ju/jupyterhub 点击查看 免费下载 本文基于 JupyterHub 官方文档「Running proxy separately from the hub」,系统讲解如何… · 2026/9/25 17:57:31

【论文笔记Rapidly Handling Constrained Multi-objective Optimization Problems with Hypervolume Gradient01】
【论文笔记Rapidly Handling Constrained Multi-objective Optimization Problems with Hypervolume Gradient01】

《Rapidly Handling Constrained Multi-objective Optimization Problems with Hypervolume Gradient Subspace Approximation》Kenneth M. Zhang, Angel E. Rodriguez-Fernandez, Ke Shang, Senior Member, IEEE, Hisao Ishibuchi, Fellow, IEEE, and Oliver Schutze提出了一种… · 2026/9/25 18:27:17

万能文件分析师Skill:以后收到几十页PDF,别再从第一页开始硬看了!
万能文件分析师Skill:以后收到几十页PDF,别再从第一页开始硬看了!

工作里最容易被低估的一件事,就是“看文件”到底有多耗时间。领导突然丢来一份80页的PDF,让你下午给结论;群里一次发来5个方案,让你说说区别;同事传来几十页制度文件,让你找出跟某个项目有关的条款。过去我… · 2026/9/25 18:26:59

你不知道的Python开发工具配置:TaoToken统一Key接入PyCharm与Vim
你不知道的Python开发工具配置:TaoToken统一Key接入PyCharm与Vim

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

【WPF-VisionMaster】机器视觉通用平台V5.0版本发行说明
【WPF-VisionMaster】机器视觉通用平台V5.0版本发行说明

机器视觉通用平台V5.0版本发行说明地址 了解更多 System.Windows.Controls 命名空间 | Microsoft Learn 控件库 - WPF .NET Framework | Microsoft Learn WPF 介绍 | Microsoft Learn 使用 Visual Studio 创建新应用教程 - WPF .NET | Microsoft Learn https://github.co… · 2026/9/25 18:25:52

只用一个问题训练几百步,模型居然还在变强:一篇论文的意外发现
只用一个问题训练几百步,模型居然还在变强:一篇论文的意外发现

先说一件让人有点摸不着头脑的事。有研究团队拿出一个数学题,就一道题,反复喂给模型训练了上千步。按常理这事儿应该很快就练废了,一道题能有多少信息量?可结果是,模型的准确率一路涨,涨到接近用全部一万七千道题训练出来的效果的七成二。这不是巧合,也… · 2026/9/25 18:25:34

Atlas 300V 24G实战:从NPU选型到YOLO生产级部署
Atlas 300V 24G实战:从NPU选型到YOLO生产级部署

刚拿到Atlas 300V 24G这块卡的时候,我第一反应也是——这不就是一块显存比较大的“图像处理卡”吗?直到把YOLO模型完整跑完一遍,才真正搞明白它和普通GPU加速卡的区别。这篇文章不整虚的,就围绕两个实际问题展开:Atlas… · 2026/9/25 18:25:34

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

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

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

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

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

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

了解更多?预约专属演示

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

企业微信二维码