自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2026-01-19 10:35:31 850

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

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

2025-12-10 09:46:21 1036

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

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

2025-12-03 14:04:07 729

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

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

2025-12-01 15:42:20 671

原创 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 1944

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

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

2025-11-20 22:41:45 504

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

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

2025-11-20 22:41:13 365

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

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

2025-11-20 16:19:58 368

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

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

2025-11-17 20:00:33 425

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

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

2025-11-17 09:39:49 1000

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

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

2025-11-17 09:38:57 499

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

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

2025-11-17 09:38:01 543

原创 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 992

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

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

2025-11-16 17:16:49 800

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

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

2025-11-16 16:59:59 684

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

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

2025-11-16 16:57:28 527

原创 VGLITE渐变填充功能封装

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

2025-11-13 14:04:12 644

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

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

2025-11-10 15:59:25 791

原创 constexpr与宏定义的区别

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

2025-11-10 15:58:48 858

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

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

2025-11-09 15:25:42 365

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

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

2025-10-15 22:32:41 1068

原创 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 912

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

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

2025-10-11 11:03:01 498

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

如果类有虚函数,析构函数也应该是虚函数。public:// ✅ 虚析构函数// 纯虚函数虚析构函数是多态类设计的基本要求,不是可选项内存安全比性能更重要,尤其在嵌入式系统中使用现代C++特性overridefinal)让代码更安全重视编译器警告,它们往往指出潜在的严重问题。

2025-10-10 16:22:40 848

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

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

2025-10-10 15:47:07 339

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

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

2025-10-10 14:35:33 746

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

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

2025-09-27 17:29:11 669

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

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

2025-09-27 15:55:52 496

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

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

2025-09-27 15:42:38 452

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

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

2025-09-23 21:47:47 624

原创 字符编码完全指南:从ASCII到Unicode的全面解析

字符编码是将字符映射到数字的规则系统。计算机只能处理数字,因此需要编码来将人类可读的字符转换为计算机可处理的数字。现代应用:优先选择UTF-8传统系统:根据具体需求选择对应编码性能要求:考虑UTF-32(内部处理)和UTF-8(存储传输)存储空间:优先UTF-8兼容性:考虑ASCII兼容性。

2025-09-23 16:30:49 1097

原创 C++ inline 关键字详解

/ 在头文件中定义内联函数// 实现代码// 多个 .cpp 文件包含这个头文件// 内联展开// 内联展开inline性能优化:避免函数调用开销代码展开:在调用点直接插入函数体编译器建议:建议编译器进行内联优化头文件定义:允许在头文件中定义函数而不产生重复定义错误在静态成员函数中使用inline特别有用,因为可以在头文件中直接实现简单的工具函数,既保持了封装性,又获得了性能优势。

2025-09-23 14:52:26 515

原创 C++静态成员函数实现语法详解

public:// 单例模式private:// 静态测试函数// 另一个静态函数// 普通成员函数void ParcelDispatcher::ParcelNotifyTestMultimedia(void) // 正确:不使用 static// 实现代码void ParcelDispatcher::ParcelNotifyTest(void) // 正确:不使用 static// 实现代码// 实现代码声明时:使用static关键字实现时:不使用static关键字。

2025-09-23 14:50:53 254

原创 内部标识符

下划线包裹的命名本质是一种“内部标识隔离把“实现细节”(_XXX_)和“对外接口”(XXX)分开,方便维护和升级。避免不同模块、不同开发者之间的命名冲突(尤其在没有命名空间的C语言中)。_XXX_是内部的,不要直接修改或依赖它,应该用外层的XXX。就像现实中,公司内部文件会标“内部机密”,对外则用公开名称,既保护内部细节,又方便外部使用。

2025-09-22 17:39:30 314

原创 嵌入式(SOC+FreeRTOS)汽车仪表盘接口参数安全:规范遵循与防护实践

在汽车电子领域,基于SOC芯片和FreeRTOS系统的仪表盘是驾驶员获取车辆状态的核心窗口,接口参数安全直接关乎驾驶安全与系统稳定性。本文结合代码规范(尤其是明确接口函数参数合法性检查责任的规则),从案例、防护技术到开发流程,全面解析汽车仪表盘接口参数安全。

2025-09-22 16:51:45 1043 3

原创 循环语句效率与规范的原理及示例解析

在C/C++编程中,循环是实现重复操作的核心,但循环的编写方式对程序效率和可读性影响极大。下面结合与,深入解析循环的优化与规范编写。

2025-09-22 16:19:23 748

原创 设置成员变量的成员函数

专门编写SetValue这样的函数,核心是为了实现封装性、数据安全、功能可扩展和接口规范,这是面向对象编程中“高内聚、低耦合”原则的具体体现。不是不能直接赋值,而是通过函数控制赋值过程,让代码更健壮、更易维护。

2025-09-22 15:18:56 249

原创 开阳630HV100芯片的外设配置

开阳630HV100是一款基于ARM Cortex-A5的嵌入式处理器,其外设设计针对工业控制、HMI和物联网应用进行了深度优化。fill:#333;color:#333;color:#333;fill:none;内存接口显示子系统连接接口工业控制安全引擎。

2025-07-12 21:28:33 1170

原创 检查输入有效性(指针是否为NULL)和检查字符串长度是否为0

if(!src)保护的是程序的生命周期(防崩溃)if(len==0)保护的是程序的逻辑正确性(防未定义行为)这正是C语言编程的核心原则:“永远不要信任外部输入,用防御性代码处理所有边界情况”

2025-07-12 21:17:34 487

原创 程序改错---字符串

修正后的函数能安全实现字符串逆序功能,正确处理边界情况,且无内存泄漏风险。

2025-07-12 21:13:53 747

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

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

2025-12-03

谷粒学苑第11天项目笔记

谷粒学苑第11天项目笔记

2023-03-05

空空如也

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

TA关注的人

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