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

发布时间:2026/9/25 17:58:22

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个单词以内组成说明该函数组织不合理不太适合写成一个函数需要重新规划拆分成多个子函数让多个函数共同完成原函数实现的流程过程。
延伸阅读

更多相关文章

2026/9/25 17:58:22

Spring AOP—基于注解的AOP实现(IDEA2026+JDK17)

0.环境 IDEA2026.1 JDK17 spring: 5.3.20 1.创建项目 打开IDEA ,点击文件—>新建—>项目 然后,下面选择”Java“,名称为:SpringAOPAnnotation,构建系统选:Maven,JDK版本选17。 最后点…

2026/9/25 18:58:24

第 13 篇:三维风场-WebGL2GPU效果——把十万条流线交给 GPU,让风自己吹

风这东西,是看不见的。 你不能用一张影像把它拍下来,不能用一栋白模把它堆出来,也不能像降水那样给它画个色块——它是流动本身。气象部门给到手里的,往往只是一堆规规矩矩的数字:某个经纬度、某个高度上,风往东吹了多少米每秒、往北吹了多少、往上抬了多少。 怎么让这…

2026/9/25 18:58:24

HTTP POST不被支持?405错误的原理与实战排查指南

1. 这不是你的错,是HTTP协议在“按规矩办事”“HTTP method POST is not supported by this URL”——这行报错,我第一次在Unity项目里看到时,正对着一个灰蒙蒙的登录界面发呆。点击“登录”按钮,控制台瞬间炸出这串英文&#xff…

2026/9/25 18:58:24

Windows Server 2019 安装 Intel N7265 无线驱动实战指南

1. 项目概述:为什么在 Windows Server 2019 上折腾 Intel Wireless-N 7265 驱动是个“反常识”操作?你点进这篇内容,大概率是因为——系统装好了,网线插着能用,但一拔掉网线,WiFi图标灰了、设备管理器里显示…

2026/9/24 20:24:47

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/25 0:02:35

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:02:35

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:02:35

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/25 18:41:36

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/25 18:34:56

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑