自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(208)
  • 收藏
  • 关注

原创 从图形化到命令行:一次 SVN 工程化能力补齐与流程治理实践(Windows)

团队已有图形化 SVN 使用习惯,提交流程可跑通。命令行能力薄弱,环境异常时定位效率低。提交前自检动作不统一(update/status/diff 执行不稳定)。误区 1:装了图形化客户端就一定有命令行结论:不一定,需确认命令行组件误区 2:命令报错就是命令写错结论:先查安装与 PATH,再看语法误区 3:GUI 与 CLI 二选一结论:工程实践应“双栈并用”,各取所长。

2026-04-15 14:40:36 453

原创 Windows 环境下 SVN 命令行能力补齐:一次工程化排障与标准化实践

在已有图形化流程的团队环境中,补齐命令行svn能力是提升交付效率与问题定位能力的关键步骤。本文基于一次真实排障过程,系统梳理了 Windows + PowerShell 下命令不可用的定位路径、根因分析、修复方案与团队可复用规范,并给出 C/C++ 项目下的高频命令模板。

2026-04-15 14:29:23 373

原创 消除编译器或静态检查对“形参未使用”的告警(常见为 `-Wunused-parameter`)

保留统一接口签名明确表达“参数暂不使用”避免未使用参数告警影响编译它看起来“多余”,但其实是团队规范、跨平台编译、代码可维护性的综合结果。如果你在项目里也经常遇到或“框架接口参数用不上”的情况,建议把这个习惯用起来:简单、干净、长期省心。

2026-04-02 17:32:59 237

原创 Windows 快捷键体系化实践

很多人把快捷键当“技巧”,其实它更像“操作系统级工程化能力”。

2026-03-23 22:36:55 379

原创 全局搜索、跳转、重构快捷键的实战组合

用搜索定位入口用跳转理解链路用语义重构保证安全对 C/C++ 这种大型工程,这套方法尤其有效。找得更快、改得更稳、回归更有底气。

2026-03-23 22:33:58 403

原创 抛弃“鼠标点点点”,用键盘流把节奏拉满

开发效率提升,不一定靠更快的电脑,而是靠更少的无效动作。快速访问做入口快捷键做切换做定位你会很快感受到:同样 8 小时,能做完更多真正有价值的事。

2026-03-23 22:28:49 479

原创 决定你上限的,不是语法,而是“代码习惯”

没有名字;没有注释;但一改就会出问题的数字。// 显示 '---'// 不显示0xFFF / 0xFFE 表示什么?协议约定?特殊含义?过几个月你自己看到这段代码,都要先去翻协议文档才能想起来。

2026-03-18 14:32:02 367

原创 车机 HMI 里的“告警文本”其实很吃性能

先用工具把时间花在哪儿看清楚把加载和布局分开打点、输出到帧追踪日志里。再结合项目实际约束,删掉不必要的逻辑我们的告警文案本来就是“纯\n控制行数”,所以字库自动换行是真正的“白干活”。最后用更简单的语义替代复杂逻辑“按像素宽度自动折行” → “数\n得到行数,选 preset”,既符合资源约束,又释放了一点 CPU。如果你也在做车机 / 嵌入式 UI 的优化,可以尝试问自己一句:“这块逻辑现在真有那么灵活的需求吗?如果所有资源都是固定的,是不是可以把排版引擎变成一个更简单的、只认\n。

2026-03-06 11:16:31 342

原创 Emoji 深挖专篇:从 Unicode 到「为什么同一个表情每个平台都不一样」

Emoji =一套语义 + 一堆分散的码位 + 各平台自家的图形表现;它会用到:高位码点、变体选择符、肤色修饰符、ZWJ 连接、多码点序列;对开发来说,核心是三点:理解它不是一个连续区块,过滤/识别要么用近似范围,要么用官方列表;处理好字符串长度、数据库字符集和日志/协议中的编码问题;从产品/UX 角度合理使用,不要把关键含义只交给 Emoji。

2026-03-05 17:16:57 609

原创 车载仪表盘 U 盘强制升级失败:FAT32 分配单元大小导致的问题与解决

在车载仪表盘项目中使用 U 盘进行说明问题与(尤其是 FAT32 的)有关,而不是 U 盘硬件或升级包本身损坏。

2026-03-02 13:24:15 597

原创 Python 实战:自动对齐 C++ 数组代码,提升代码可读性

知识点说明示例r''原始字符串上下文管理器自动关闭文件获取索引和值re.match()正则匹配f'...'f-string{变量:格式}格式化输出{num:4d}表示4位整数主程序入口直接运行脚本时执行使用 Python 自动对齐 C++ 数组文件读写、正则匹配、格式化输出异常处理与主程序入口希望本文能帮助你提升代码可读性和维护效率。

2026-01-19 10:35:31 949

原创 一个由非虚函数导致的隐藏Bug:窗口显示异常问题排查与解决

析构函数:如果基类指针可能指向派生类对象,基类析构函数必须是虚函数需要多态的方法:如setVisibleonDrawonEvent等。

2025-12-10 09:46:21 1080

原创 Python vs PowerShell:自动化 C++ 配置文件的两种实现方案

场景推荐方案理由跨平台项目Python通用性强Windows 专属PowerShell无需安装复杂数据处理Python库更丰富系统管理任务PowerShell系统集成好团队协作Python学习成本低工具没有绝对的好坏,只有适合与否。选择最适合你项目和团队的方案,才是最佳实践。🚀。

2025-12-03 14:04:07 795

原创 C++临时对象与悬空指针:一个导致资源加载失败的隐藏陷阱

public:// 返回 std::string 对象// ...return "";// 返回临时 string 对象// 返回临时 string 对象现象:资源文件路径乱码,加载失败原因:临时销毁后,c_str()返回的指针失效解决:保存对象,确保生命周期覆盖使用范围。

2025-12-01 15:42:20 735

原创 Windows批处理脚本(.bat)完全指南:从入门到实战

批处理脚本(Batch Script)是 Windows 下的自动化脚本,扩展名为.bat或.cmd。它可批量执行命令,常用于自动化任务、资源打包、环境配置等。@echo offGOTO :EOFecho 正在打包 %RES_NAME%...echo 打包 %RES_NAME% 失败!exit /b 1echo 打包 %RES_NAME% 成功!GOTO :EOF批处理脚本是 Windows 下实用的自动化工具。基础语法:注释、变量、命令常用命令:SET、ECHO、DEL、IF、FOR。

2025-12-01 14:37:50 8376

原创 C++ 多态性实战:何时使用 virtual 和 override?

是否通过基类指针/引用调用?派生类是否需要扩展基类行为?是否需要统一接口但不同实现?在这个菜单系统的案例中,三个条件都满足,因此必须使用多态。通过将基类函数声明为virtual,确保了代码的正确性和可扩展性。

2025-11-20 22:41:45 549

原创 运行时绑定:为什么看起来调用父类,实际执行的是子类?

虚函数 + override → 编译期指向父类,运行期定位子类。尽管语法看起来“像在调用父类方法”,实际上执行的永远是对象真实类型的实现。保留调用,是为了最大化复用父类逻辑,同时满足新增需求(如状态同步)。掌握这一点,对于阅读和设计现代 C++ UI 框架非常关键,也能大幅减少“为什么状态没更新”的调试时间。

2025-11-20 22:41:13 385

原创 运行时绑定:为什么看起来调用父类,实际执行的是子类?

虚函数 + override → 编译期指向父类,运行期定位子类。尽管语法看起来“像在调用父类方法”,实际上执行的永远是对象真实类型的实现。保留调用,是为了最大化复用父类逻辑,同时满足新增需求(如状态同步)。掌握这一点,对于阅读和设计现代 C++ UI 框架非常关键,也能大幅减少“为什么状态没更新”的调试时间。

2025-11-20 16:19:58 397

原创 表驱动编程实战:让 UI 逻辑既清晰又好维护

表驱动的核心思想是:把一系列相似逻辑的“变化点”抽成配置表,用结构体/数组描述。程序运行时,统一遍历这张“表”,调用通用逻辑处理每一条配置。减少重复:逻辑只写一次。修改成本低:改配置就能改变表现,不动代码。更易扩展:新增场景只需加配置项。这跟剧情脚本、配置驱动 UI、状态机表等思路一致,只是我们在普通 C++ 代码里应用它。

2025-11-17 20:00:33 462

原创 一次曲线控件重构实战:从业务耦合到通用组件

不要一上来就推倒重写:先稳定接口,再替换实现,给自己留回退空间;把业务逻辑上移,把 widget 当成真正的“控件”用业务层负责:取数 + 计算 + 选 style;控件层负责:根据 series + style 画图;通过 ViewState/LineSeries/LineStyle 这样的数据结构,把隐形知识显式化,之后再优化或迁移就简单很多;Theme/Color/Style 单独抽象,可以让项目的 UI 风格更容易统一和演进。

2025-11-17 09:39:49 1028

原创 优化与重构:大改之前要先理清架构

这套指导思想本质上是业界常见的一些经验(重构优先、接口稳定、增量演进、可回滚),我帮你结合你现在的车机曲线项目,换成了更接地气的版本。“我有没有先把角色、接口、调用方都理清楚?

2025-11-17 09:38:57 557

原创 车机项目中的 Widget 设计反思:从“能用”到“好用”的改进方向

目前widget控件承担了视图 + 业务 + 数据访问 多重职责;魔法数字和枚举下标增加了理解和修改成本;日夜模式、颜色策略等横切逻辑在很多地方重复实现。改进方向可以概括为四个关键词:解耦:业务逻辑上移,widget 专注绘制;抽象:用 ViewState、枚举常量、ThemeHelper 抽掉重复逻辑;规范:统一控件接口、去除魔法数字和#if 0;渐进:从新功能和局部修改入手,避免大范围一次性重写。

2025-11-17 09:38:01 587

原创 C/C++ 整数字面量后缀全解析:U、L、UL + 项目实战坑点总结

面向已经在写实际 C/C++ 工程(尤其是车机、嵌入式、UI)的同学。目标:搞清楚整数字面量后缀到底有什么用、什么时候必须写、实际项目里有哪些坑。10 // 默认整型,通常是 int10U // unsigned int(无符号)告诉编译器,这个“数字常量”应该是什么整型类型。不写后缀时,编译器按一套规则自动推断类型,例如:先尝试int,装得下就用int;装不下再尝试long,再不行用long long。Uu:无符号(unsigned)Ll:longLLll:long long。

2025-11-16 17:35:13 1331

原创 C++ 中的继承与组合

是的子类(继承关系,is-a)。MenuWindow只是“拥有多个 MenuSubWindow 子类实例”的容器(组合关系,has-a)。析构函数和上的override,都是在和BaseWindow建立重写关系,跟MenuWindow无关。

2025-11-16 17:16:49 821

原创 C++ Lambda 表达式实战入门与进阶

不用跑到文件上方去写一堆。

2025-11-16 16:59:59 716

原创 车辆状态界面这部分代码的缺陷总结

在这块代码中,整体功能实现是 OK 的,但从可读性、可维护性和可扩展性来看,存在一些典型的设计缺陷,集中体现在各种数组和常量的使用方式上。

2025-11-16 16:57:28 547

原创 VGLITE渐变填充功能封装

该函数是一个典型的“矢量图形渐变填充”实现,通过vg_lite渐变配置(颜色、过渡点、变换);路径定义(填充区域的形状);最终绘制(将渐变填充到路径区域)。常用于图表(如面积图)的填充效果,让图形从一种颜色平滑过渡到另一种颜色,提升视觉效果。

2025-11-13 14:04:12 682

原创 车载仪表开发:常量定义最佳实践清单

适用场景:调试模式、功能模块开关、多车型适配。示例:// 指示灯测试模式开关(编译时决定是否启用测试代码)1// 多车型适配(A/B车型差异化功能)1// A车型专属指示灯配置#else// B车型专属指示灯配置#endif说明:constexpr 无法替代条件编译,这是宏定义的核心不可替代场景,用于控制编译阶段的代码取舍。

2025-11-10 15:59:25 829

原创 constexpr与宏定义的区别

在 C++ 中, 是一个关键字,用于声明编译期常量或可在编译期执行的函数。它的核心作用是让变量或函数的计算在编译阶段完成,而不是运行时,从而提升程序性能(减少运行时计算)并增强代码安全性(编译期检查)。这里的 表示 是一个编译期常量,即它的值在编译时就已经确定,无法在运行时修改。声明编译期常量和 类似, 修饰的变量必须在声明时初始化,且初始化的值必须是编译期可计算的常量表达式(如字面量、其他 变量的组合等)。例如:与 的区别修饰函数(C++11及以后) 还可以修饰函数,表明该函

2025-11-10 15:58:48 906

原创 C/C++中const指针的赋值规则

指针类型能否修改指针指向的地址?能否修改指向的内容?必须声明时初始化?能不能否不能能(内容非const时)是不能不能是记住核心:const修饰谁,谁就不能被修改。指针本身的可修改性与指向内容的可修改性是独立的,由const的位置决定。在实际开发中,根据是否需要修改指针指向或内容来选择合适的const组合,既能保护数据安全,又能保证代码灵活性。

2025-11-09 15:25:42 417

原创 nullptr vs NULL:C/C++ 空指针的演变史

场景推荐理由纯C项目NULLC语言不支持nullptr纯C++项目nullptr类型安全、现代标准C/C++混合项目看情况协议层用NULL,UI层用nullptr您的项目两者都可以已经混合使用,保持风格统一即可核心原则✅一致性> 完美性(同一文件内保持统一)✅可读性> 教条性(团队习惯最重要)✅安全性:新代码优先用nullptr。

2025-10-15 22:32:41 1113

原创 Git Commit Message 最佳实践:从一次指针Bug说起

写给人看,不是给机器Git已经记录了所有技术细节Commit message应该让人理解意图回答What和Why,不是Where和How✅ 做了什么,为什么做❌ 在哪改的,怎么改的简洁但完整15-50字说清楚必要时添加详细描述一致性很重要团队统一规范使用工具辅助git log --grep = "文本.*乱码" # 找到了你的提交 abc123 修复文本指针取地址错误导致显示乱码 # 点开看详情 git show abc123 # 立即明白了问题和解决方案 # 节省了2小时调试时间。

2025-10-11 11:17:02 939

原创 从一个&符号引发的血案:深入理解C++指针、地址与内存布局

1. 数据本身: "Hello" 在 Flash (0x0800_xxxx)2. 指针变量: str 在 Stack (0x2000_xxxx)3. 指针的地址: &str 也在 Stack关键区别:str = 字符串的地址(应该传这个)✅&str = 指针的地址(千万别传这个)❌。

2025-10-11 11:03:01 532

原创 C++嵌入式开发:虚析构函数警告的深度解析与解决方案

摘要: 在嵌入式车载HMI开发中,使用IAR编译器时出现"delete of class with virtual functions but no virtual destructor"警告。该问题源于基类BaseWindow定义了虚函数接口但未声明虚析构函数,导致通过基类指针删除派生类对象时可能引发内存泄漏。分析表明,非虚析构函数会导致派生类资源未被正确释放,而虚析构函数通过虚函数表机制确保完整调用派生类和基类的析构函数。解决方案推荐在派生类(如VolumeWindow)的析构函数前添加virtual关

2025-10-10 16:22:40 880

原创 C++嵌入式开发:const类型转换的安全性分析

方面说明转换效果去掉const限定符,允许通过指针写入内存本质不改变内存属性(字符串字面量仍在只读区)安全性取决于后续代码是否真的修改内存你的场景相对安全,因为只读取建议用const_cast更明确,或长期改TextInfo转换本身是"欺骗编译器",告诉它"这是可写的"但实际内存仍是只读的只要不真的写入,就是安全的代码是安全的,前提是确实只读取。

2025-10-10 15:47:07 360

原创 字符串字面量转换警告的深度解析

字符串字面量是类型,不应赋值给char*返回,强制转换有风险使用const参数既安全又灵活,是最佳实践不要用强制转换掩盖问题,应从根源上修复// 步骤1:找到所有字符串参数函数// 步骤2:统一加 const// 步骤3:删除所有强制转换// 步骤4:编译验证// - 警告消失// - 代码更简洁// - 类型更安全。

2025-10-10 14:35:33 786

原创 C语言风格哈希表vs C++风格哈希表的区别

特性C语言风格C++风格内存管理手动自动类型安全弱强代码量多少维护性难易性能高高学习成本高低推荐:现代C++项目优先使用;仅在内存受限或需精细控制时考虑C风格实现。

2025-09-27 17:29:11 694

原创 OpenGL ES vs VG-Lite:嵌入式图形渲染引擎对比分析

特性OpenGL ESVG-Lite渲染能力3D + 2D2D为主性能开销较高较低内存使用较大较小开发复杂度较高较低硬件加速支持支持旋转支持需手动实现内置支持。

2025-09-27 15:55:52 575

原创 嵌入式C++开发中全局函数与类成员函数的选择策略

全局函数:简单、高效、易与C互操作,适合无状态工具函数和性能敏感场景。类成员函数:封装性好、命名清晰、支持继承/多态,适合有状态管理和复杂业务。

2025-09-27 15:42:38 485

原创 Data Wrapper(数据包装器) 设计模式实践

包装原始数据:将基本数据类型包装成对象提供统一接口:为不同类型的数据提供相同的访问方式添加额外功能:如验证、日志、观察者模式等// 使用示例:多媒体数据列表DM_ITEM。

2025-09-23 21:47:47 715

自动更新 MessageWindowConfig.cpp 中 217 个配置项的 StringID 字段的脚本

自动更新 MessageWindowConfig.cpp 中 217 个配置项的 StringID 字段的脚本

2025-12-03

谷粒学苑第11天项目笔记

谷粒学苑第11天项目笔记

2023-03-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除