聊聊头文件 / 代码模块分层:公用、业务专用,还有个好玩的悬空引用真实例子

发布时间:2026/10/3 16:40:40

聊聊头文件 / 代码模块分层:公用、业务专用,还有个好玩的悬空引用真实例子 前言写C/C的时候大家都知道头文件分两种系统标准头文件还有我们自己写的头文件。不光CJava、Python、JS都可以套用这个思路。很多人到这里就止步了但我自己平时写项目会把我们自己写的代码再拆成两类业务专用代码 和 通用公共代码。而且这里面有几个很有意思的类比甚至还碰到过一个真实场景刚好对应编程里的悬空引用Dangling Reference今天随便聊聊我的这套理解。一、传统划分标准库 vs 自己写的代码拿C/C头文件举例系统/标准库头文件比如stdio.h、vector语言自带。Java的JDK、Python内置库、JS原生API都属于这一类。特点完全通用和业务没关系拿来就能用。自己写的代码项目里的头文件、类、模块。重点来了自己写的这部分还可以继续拆分二、自研代码分成两类业务专用 和 公共通用1业务专用代码专门服务某一个项目、某一套业务。比如订单结构体、业务状态枚举只有当前这个项目才看得懂。特点绑定业务换个项目基本没法直接拿去用需求一变就要改项目下线了这块代码也就跟着废弃生命周期完全跟着项目走只能放在当前项目目录里面不能放到上层给别的项目引用2公共通用代码不和任何业务挂钩就是纯粹的工具。日志封装、字符串处理、时间工具这类。特点里面没有任何业务名词不依赖业务逻辑改动很少很稳定多个项目都可以复用生命周期独立就算某个业务项目删掉了这部分代码还能继续用我给这个公共代码文件夹起名叫static。不是说里面全是C static关键字的变量我取的含义是稳定、静止很少改动。放在所有业务项目的同级甚至上一级目录多个项目一起引用。三、好玩的类比static目录 ≈ C静态成员这个比喻是我自己琢磨出来的感觉特别贴切每一个业务项目就像是new出来的一个实例。业务专用代码就是实例的成员变量。实例销毁成员就没了。static公共目录就像是类的静态成员。它不属于任何一个单独实例是所有实例共享的一份。不管新增多少业务项目都是共用这一份static底座。单个项目下线不会影响它。还有一个巧合Windows网络设置里也有公用网络、专用网络。专用网络家里局域网专属环境对应业务专用代码公用网络咖啡馆公共WiFi大家共用的基础设施对应static公共底座当然两者侧重点不一样Windows是区分访问权限代码这边是区分复用范围和生命周期。只是刚好可以拿来辅助理解。一条铁律业务代码可以依赖static公共库但是static里面绝对不能引入任何业务头文件。一旦反向依赖公共库就绑定业务不再通用了。目录结构大概长这样workspace/ ├─ static/ # 全局公共底座跨项目复用很少改动 │ ├─ log.hpp │ ├─ string_util.hpp │ └─ time.hpp ├─ project_order/ # 订单业务项目 │ └─ biz/ # 订单专属业务头文件、结构体 └─ project_goods/ # 商品业务项目 └─ biz/ # 商品业务代码四、真实踩坑案例活生生的 Dangling Reference悬空引用之前遇到一件挺搞笑的事。有个业务项目快要做完了项目里面一份业务专用头文件基本没人使用了。既然没人用我就在这份头文件上面随便折腾东改西改用来做自己的测试研究肯定不能放到正式环境。结果别的同事想拿这个头文件过去用这不就是典型的悬空引用吗这个头文件本身就属于这个业务项目的实例资源生命周期快要结束相当于一块马上要free掉的内存。别人还拿着引用打算继续使用。而且我还在这块“内存”上随便修改。就算现在文件还在仓库里看着能打开但是内容已经被我随便改动了。拿过去编译就算能过后续原项目下线删掉文件直接炸。很多人误以为文件还在仓库里就是稳定可用的代码。忽略了它绑定的业务上下文和生命周期。一句话总结业务私有代码生命周期跟着项目走。项目快要下线这块代码就属于濒危资源严禁别的项目拿来引用。五、最后总结三层结构语言标准库 全局公共底座(static) 项目业务代码只能单向依赖。业务代码属于实例独有公共底座属于全局共享类比类static成员。公共库一旦引入业务代码就废掉了失去复用价值。不要去引用别的项目里快要废弃的业务代码本质就是悬空引用埋大坑。这个分层思路不局限C/CJava、Python、JS都可以套用。小项目可能感受不到多项目共存的时候边界一旦乱掉后面维护会非常痛苦。讨论区你们项目里公共工具目录一般叫什么common、base、utils还是别的有没有碰到过有人把业务逻辑塞进公共工具库导致公共代码被业务污染的情况欢迎一起聊聊踩过的坑。
延伸阅读

更多相关文章

2026/10/3 16:40:40

KUKA KRC4与S7-1200走Profinet通讯配置详解

我们先直接说结论:KUKA工业机器人(KR C4系列搭配KRC4控制器)和西门子S7-1200走Profinet通讯,本身并不复杂,但第一次做的人基本都会卡在“设备名称分配”和“IO地址映射”这两个环节上。前阵子我去现场帮客户调试一条小…

2026/10/3 17:45:42

电脑玩手机游戏模拟器哪个好 电脑玩手机游戏什么模拟器好

手机屏幕尺寸有限,玩三国杀这类卡牌策略手机游戏时,武将技能描述密密麻麻,手牌一多手指点选就容易出错,因此想要一款电脑玩手机游戏模拟器,希望在大屏幕上获得更清晰的牌面信息和更精准的操作体验。想要一款好用的电脑…

2026/10/3 17:45:42

DeepSeek LeetCode 213. 打家劫舍 II Java实现

LeetCode 213. 打家劫舍 II - Java 实现 题目分析 与打家劫舍 I 的区别:房屋首尾相连成环,第一个和最后一个不能同时偷。 核心思路:把环形问题拆成两个线性问题: 偷 [0, n-2] 范围内的房子(不偷最后一间)偷…

2026/10/3 17:45:42

LangGraph 从入门到实战(02):节点、边、状态——组装你的第一个多步图

LangGraph 从入门到实战(02):节点、边、状态——组装第一个多步图 第 01 篇跑通了最简的一步图。这一篇把它升级成「多节点、有条件分支、自定义合并」的真正雏形——这三件事正是 Agent 循环的三块基石。 一、多节点:一条「流水线」 把一个数字先 +1 再翻倍,用两个节点…

2026/10/3 17:45:42

Android 开发环境从零搭建与首跑指南

摘要: 本文是一篇面向零基础读者的 Android 开发环境搭建实战指南。文章从核心概念讲起,依次覆盖硬件门槛自查、Android Studio 安装、SDK 配置、首个 Hello World 工程创建、代码编写、编译构建、模拟器与真机调试、日志与断点调试,最后给出性能优化与后续学习路径建议。全…

2026/10/3 17:40:42

蓝牙芯片驱动开发-第5章第6题-如何根据优先级合理分配DMA通道

蓝牙面试题解析:如何根据优先级合理分配 DMA 通道? 难度:⭐⭐⭐⭐ 较难 | 场景:社招二面/三面、MCU 驱动设计 | 高频:🔥🔥🔥🔥 标准答案 DMA 通道分配遵循 高优任务独占 + 低优任务共享 + 静态预留 + 动态调度 的原则: ① 蓝牙 SoC 中的典型 DMA 通道分配 // …

2026/10/2 8:16:46

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/10/2 18:20:53

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/3 15:02:19

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/3 0:04:31

国内大学生必备的AI写作辅助软件是哪款?

国内高校学生在论文写作过程中,越来越依赖AI辅助工具提升效率,主流方案以本土化全流程工具为核心,结合通用大模型与专业插件,覆盖选题构思、框架搭建、初稿撰写、查重降重、格式调整等关键环节,本文将深入解析当前主流…

2026/10/3 0:04:31

Codex接入Jev模型完整指南:配置方法、本地部署与踩坑排查

最近不少人在讨论 Codex 搭配 Jev 这套玩法,我一开始没太当回事,直到自己把 Jev 接进 Codex跑了几轮编码任务之后,才明白那些说“直接起飞”的人是怎么想的。Codex 作为工具本身已经够能打了,但模型固定、上下文策略固定&#xff…

2026/10/3 0:04:31

GitHub 热门: NVIDIA/Model-Optimizer

👋 Hi,我擅长 AI 大模型应用落地、意识解码与 AI 开发工具链 。 💡 创业路上,用技术换时间,一起把 AI 变成生产力 🚀 >GitHub 热门: NVIDIA/Model-Optimizer 凌晨两点,你刚把跑通了的 Qwen3.…

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

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

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