C++
文章平均质量分 88
以实战为线索,深入研究技术细节。提升工程化编码能力和思维能力。总结、沉淀、积累。
特立独行的猫a
csdn技术男猫哥,高级嵌入式软件工程师、c++软件工程师、全栈工程师。专注分享c++、QT、嵌入式linux、Android、HarmonyOS、前端小程序、AIoT(物联网+人工智能)、单片机、通信技术、开发工具等相关内容。
展开
-
Clang-Tidy 的介绍及使用(强大的静态代码分析工具)
Clang-Tidy 是一个强大的 C++ 静态代码分析工具,能够帮助开发者发现和修复代码中的潜在问题。通过配置文件和自动修复功能,你可以更高效地改进代码质量。将其集成到你的构建系统中,可以进一步提高开发效率和代码可靠性。希望本文能帮助你更好地理解和使用 Clang-Tidy,提升你的 C++ 编程技能。原创 2024-09-05 22:45:00 · 1835 阅读 · 0 评论 -
C/C++ 中的算术运算及其陷阱(详解,举例分析)
C/C++中的算术运算虽然基础,但其中隐藏着许多陷阱。程序员在进行算术运算时,需要特别注意整数溢出、浮点数精度问题、除零错误以及类型转换问题,以避免程序出现难以预料的错误。通过本文的介绍和示例代码,希望读者能够更好地理解和避免这些陷阱,编写出更加健壮的C/C++程序。尽可能不要混用无符号数和有符号数,如果一定要混用,请小心谨慎。在涉及不同大小的数据类型时要小心,可能存在溢出和截断。只要存在有符号数就要考虑溢出导致的未定义行为和可能的符号反转。尽量不对小于int。原创 2024-09-05 20:15:00 · 2007 阅读 · 0 评论 -
c++多线程下崩溃一例分析 ACTIONABLE_HEAP_CORRUPTION heap failure block not busy DOUBLE
之前的三个代码接口使用了同一把锁,共享资源的访问是有序执行的没有问题。最近改成各个接口使用单独的锁,结果漏掉了共享资源的保护,于是出现了崩溃。最近与这个崩溃做斗争并定位找到的原因,成功复现了。这里总结下,后续涉及多线程访问的务必考虑周全。原创 2024-09-02 20:15:00 · 970 阅读 · 0 评论 -
浅谈 C++ 元编程
随着 C++ 11/14/17 标准的不断更新,C++ 语言得到了极大的完善和补充。元编程作为一种新兴的编程方式,受到了越来越多的广泛关注。结合已有文献和个人实践,对有关 C++ 元编程进行了系统的分析。首先介绍了 C++ 元编程中的相关概念和背景,然后利用科学的方法分析了元编程的演算规则、基本应用和实践过程中的主要难点,最后提出了对 C++ 元编程发展的展望。转载 2024-07-20 19:36:18 · 169 阅读 · 0 评论 -
c++信号和槽机制的轻量级实现,sigslot 库介绍及使用
sigslot是一个轻量级的 C++ 信号和槽库,它提供了一种类型安全的机制来处理对象之间的通信。信号和槽机制允许对象在状态变化时通知其他对象,而无需直接调用它们的成员函数。这种机制有助于减少对象之间的耦合,使代码更易于维护和扩展。sigslot是一个轻量级且易于使用的信号和槽库,适用于需要简单信号和槽机制的项目。虽然它的功能相对简单,但对于许多应用场景来说已经足够。如果你正在寻找一个轻量级的解决方案,sigslot是一个值得考虑的选择。原创 2024-07-16 21:56:20 · 991 阅读 · 0 评论 -
NDD(notepad--)的AI机器人插件制作过程
兴趣是最好的老师。周末晚上熬夜到半夜十二点多,花了几个钟头给NDD制作了一款AI搜索问答插件,时间仓促界面较丑,后续插件代码开源并维护和美化。Notepad记事本工具挺常用的,把AI接口接入进来使用起来方便多啦,直接在上面搜索问答。这里记录下详细过程,分享给有需要的小伙伴。原创 2023-03-18 21:28:04 · 3856 阅读 · 2 评论 -
C++ Core Guidelines解析 ( 好书推荐 )
C++ Core Guidelines是Bjarne和 Herb Sutter发起编写的一个开源项目,汇聚了 C++社区多年来积累的宝贵经验,是非常全面的编程最佳实践指导,包括代码风格、函数、类、错误处理、性能优化等,可以说是C++社区的集大成者。用Effective Modern C++的译者高博老师在《C++ Core Guidelines解析》推荐序中的话说,“学习C++而不了解 C++ Core Guidelines 相当于盲人摸象”。原创 2023-12-06 22:15:00 · 1073 阅读 · 0 评论 -
记一个EasyDarwin框架c++11的编译错误error: unable to find string literal operator ‘operator“
之前在linux环境中编译流媒体服务器框架EasyDarwin时,遇到了个莫名其妙的编译错误:error: unable to find string literal operator ‘operator""_U32BITARG_’ with ‘const char [2]’最后经查证,究其原因是C++11开始就不支持字符串字面量后面直接连接变量名。原创 2023-10-12 22:45:00 · 1719 阅读 · 0 评论 -
基于c++17的高性能日志库easylog介绍
easylog,阿里开源的轻量级高性能c++日志库,最低要求编译器支持c++17。属于阿里的雅兰亭库中集成的一个功能,代码量少,使用简单且性能强大。它使用了一些c++17以上的新功能特性如constexpr编译期优化,字符串视图类std::string_view,以及三方库ConcurrentQueue(线程安全的无锁队列),jkj::dragonbox(高效的浮点数到字符串的转换库),efvalue::meta_string字符串元编程,因此具有很高的性能。原创 2023-08-15 22:15:00 · 1772 阅读 · 0 评论 -
c++雅兰亭库 (yalantinglibs) 介绍及使用(序列化、json和结构体转换、协程)
雅兰亭库,名字很优雅,也很强大。它是阿里开源的一个现代C++基础工具库的集合, 现在包括 struct_pack, struct_json, struct_xml, struct_yaml, struct_pb, easylog, coro_rpc, coro_io, coro_http 和 async_simple等功能, 也一直在持续优化并添加更多的新功能。yaLanTingLibs 的目标::为C++开发者提供高性能,极度易用的现代C++基础工具库, 帮助用户构建高性能的现代C++应用。原创 2023-08-11 21:45:00 · 2141 阅读 · 4 评论 -
c++ 职责链+策略模式,实现链式过程处理
想象一下一件商品的加工,需要经过多道工艺流程处理。这一道道工艺流程就像是一个职责链,从头到尾传递。就好像网络传输时,消息发送到对端主机,经过协议栈,在这个过程中,它在不同的协议栈层级中被一层层抽丝剥茧,剥掉ip头,脱下tcp头,扯掉http头。又像清丽的舞娘不再犹抱琵琶,缓缓揭开自己面纱,犹如李清照《一剪梅》中的“轻解罗裳,独上兰舟”,最后对端的层得到了自己想要的东西。原创 2023-07-21 21:45:00 · 479 阅读 · 0 评论 -
工作中最推荐的 C/C++ 程序库有哪些,为什么?
目前在鹅厂做 Linux C++ 后台开发,可以说是我看过最优雅的现代C++项目,里面一部分工具实现非常棒,比如hash map。Folly的全称为Facebook Open-source Library,目的不是为了替代标准库,而是对标准库的一种补充,尤其是大规模下的性能。而且有很多C++标准库没有的工具,比如我之前写代码需要一个线程安全的hash map,但是C++标准库中没有线程安全的hash map。而 folly 中就有一个高性能的hash map,还有 string,对比 标准库有转载 2023-07-05 21:21:57 · 788 阅读 · 0 评论 -
关于B+树的介绍、用途和c++代码实现
数据结构和算法的重要性不言而喻,一些优秀的开源项目的核心和灵魂就是数据结构、算法。在实际的编程中我们经常可以在各种框架、算法中看见B树、B+树的身影。特别是在数据库的数据库引擎中,它们更是占据着重要的地位。 下面我将通过简单的二叉树,到树的进化,多叉树(B树、B+树)的由来、作用、操作以及它们在实际中的应用依次进行详细说明。原创 2023-05-12 01:15:00 · 3433 阅读 · 0 评论 -
Powerlink协议在嵌入式linux上的移植和主从站通信(电脑和linux板通信实验)
使用最新的openPOWERLINK 2.7.2源码,业余时间搞定了Powerlink协议在嵌入式linux上的移植,并进行了下电脑和linux开发板之间的通信实验。添加了一个节点配置,跑通了源码中提供的主站和从站的两个demo。这里总结下移植过程分享给有需要的人。在嵌入式linux下的移植还是蛮简单的,相信即便移植到单片机中也不是什么难事。挺好玩的,感兴趣的可以尝试尝试。原创 2023-05-09 22:19:34 · 1764 阅读 · 6 评论 -
替代notepad++,notepad--介绍及插件cmake编译
Notepad++ 是一个文本编辑器小软件,用来替代windows自带的记事本。然而Notepad++软件的作者太霸道,如果你不赞同他的观点,Notepad++将会在你的源码里面插入随机字符。推荐一款国产的开源跨平台软件NDD(notepad--),功能一点儿不弱,体积小巧打开速度快,且带有文件夹比对功能,连收费的beyondCompare都省了。且可以为它贡献插件啦,添加一些有意思的功能,比如我想给它添加个ChatGPT聊天机器人插件。期待更多优秀的国产软件,为国产化崛起贡献力量。原创 2023-03-16 22:45:00 · 4832 阅读 · 0 评论 -
c++插件化 NDD源码的插件机制实现解析
插件机制是一种框架,允许开发人员简单地在应用程序中添加或扩展功能。它使广泛使用,因为它可以作为模块被重复使用,并使它们更易于维护和扩展,因此它们在应用程序中非常有用。插件机制允许管理员在需要时轻松安装和卸载插件,而无需对基础应用程序做出更改。原创 2023-03-17 21:45:00 · 1045 阅读 · 0 评论 -
C++常用的11种设计模式解释及示例
c++常用的设计模式包括单例模式、工厂模式、抽象工厂模式、适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式、观察者模式和命令模式等。使用设计模式的好处:提高代码的可读性和可维护性;将常见的设计问题隔离程序的业务逻辑;重用已有的实现;消除重复代码;消除手动调整代码以达到正确逻辑的所有痛苦。原创 2023-02-06 21:45:00 · 6210 阅读 · 0 评论 -
windbg抓一个windows蓝屏分析
设备一直以来挺稳定,但还是小概率事件意外出现某设备突然蓝屏了。查看windows事件查看器提示计算机已经从检测错误后重新启动。检测错误: 0x0000009f (0x0000000000000003, 0xffffad0f4edc7570, 0xfffff8046a09ec20, 0xffffad0f4ef318a0)。已将转储的数据保存在: C:\Windows\MEMORY.DMP。原创 2023-01-30 23:00:00 · 12693 阅读 · 0 评论 -
c++开源协程库libgo介绍及使用
协程这个概念,最近这几年可是相当地流行了。尤其 go 语言问世之后,内置的协程特性,完全屏蔽了操作系统线程的复杂细节。甚至使 go 开发者“只知有协程,不知有线程”了。当然 C++也有高性能的协程库,比如我了解到的微信团队的libco、魅族的libgo、以及libcopp,开源libaco、boostcoroutine,cppcoro。阿里的基于c++20特性封装好用的雅兰亭库。原创 2023-01-14 22:15:00 · 7263 阅读 · 4 评论 -
C++可变参数使用总结
可变参数是指函数可以接受不定数量的参数。比如在printf函数,如果做日志等功能也会用到。这里总结下可变参数的使用。c语言中的可变参数先介绍下在c语言中的使用,c语言也支持可变参数,只是需要借助下va_list和va_arg宏解析。原创 2022-12-28 22:15:00 · 2702 阅读 · 0 评论 -
好书推荐《C++17 in Detail》
无意中发现作者的博客(https://www.cppstories.com/)和这本书。这本书算是对C++17新增特性较为全面的介绍,而且从实战出发,不流于语法细枝末节,简洁清晰,可以作为Scott Meyers那本非著名的《Effective Modern C++》的补充。C++ 17是对C++语言的重大更新,引入了许多新的语言特性,这本书涵盖不少源代码,每个代码示例都会详细解释,而且本书的代码示例非常好,可读性强而且简单易懂。原创 2022-12-26 21:15:00 · 3594 阅读 · 0 评论 -
c++状态机的使用
状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。英文名字叫State Machine ,不是指一台实际机器,一般就是指一张状态转换图。全称是有限状态自动机,自动两个字包含重要含义。给定一个状态机,同时给定它的当前状态以及输入,那么输出状态时可以明确的运算出来的,当输入条件时,能输出下一个状态。原创 2022-12-07 21:22:07 · 6703 阅读 · 1 评论 -
现代c++中实现精确延时方法总结
程序中实现延时有很多种办法,但是有些不建议用。比如还在用sleep()或者空转计数的方式延时?要么移植性不好,要么不够精确且效率太低。这里总结下现代c++中推荐的一种实现精确延时的方法。原创 2022-11-19 20:15:00 · 7072 阅读 · 4 评论 -
C++ 实现线程安全的map(OpenHarmony源码实现版)
c++的map的并发操作是不安全的,C++里边有红黑树实现的std::map和hash表 unordered_map。在《C++并发编程实战》一书中的162页提供了一个细粒度锁的MAP数据结构,使用了 boost的shared_mutex (C++14已经支持,C++11没有)。这里给出个OpenHarmony源码实现的safe_map。原创 2022-10-20 21:39:20 · 4497 阅读 · 0 评论 -
c++回调函数详解及实现(lambda)
回调函数就是一个被作为参数传递的函数。在C语言中,回调函数只能使用函数指针实现,在C++语言中还可以使用仿函数或匿名函数。回调函数的使用可以大大提升编程的效率,这使得它在现代编程中被非常多地使用。原创 2022-08-20 23:00:00 · 7456 阅读 · 0 评论 -
log4cplus最新介绍、详细编译过程及使用(最全面)
log4cplus是C++编写的开源的日志系统很有名也很强大,但网上大多的资料都是讲如何配置使用。关于编译过程一笔带过,尤其是windows下的编译过程少之又少。得先有编译这个提才有后续的使用,里面的坑也少有提及。以下对详细的编译过程和使用做个完整总结。log4cplus具有线程安全、灵活、以及多粒度控制的特点,通过将日志划分优先级使其可以面向程序调试、运行、测试、和维护等全生命周期。你可以选择将日志输出到屏幕、文件、............................................原创 2022-08-15 23:15:00 · 12746 阅读 · 6 评论 -
c++的lambda使用注意事项,可能导致的崩溃问题分析
Lambda表达式是现代C++的一个语法糖,挺好用的。但是如果使用不当,会导致内存泄露和潜在的崩溃问题。这里总结下Lambda表达式的使用注意事项,避免在使用中的一些陷阱。原创 2022-08-11 21:45:00 · 2580 阅读 · 0 评论 -
c++的ThreadPool,OpenHarmony源码实现版赏析和使用
c++11虽然加入了线程库thread,然而 c++ 对于多线程的支持还是比较低级,稍微高级一点的用法都需要自己去实现。比如备受期待的网络库至今标准库里还没有支持,常用acl或asio替代。鸿蒙OpenHarmony源码中的网络栈模块部分,也是十分漂亮的实现,值得好好学习研究。...........................原创 2022-08-10 23:00:00 · 2669 阅读 · 0 评论 -
浅谈c++单元测试
什么是单元测试?单元测试是指,对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,这里的最小可测试单元通常是指函数、接口或者类。单元测试贯穿在开发的整个过程,并伴随着新功能模块的产生而进行。单元测试并不会花费更多的时间,与之相反,在提高代码效率、减少bug数量、有序开展开发工作上,单元测试发挥着很大的作用。...........................原创 2022-08-02 22:30:00 · 4313 阅读 · 0 评论 -
c++基于ThreadPool实现灵活的异步任务
在工作中有时会有这种需求,在延时中执行一些任务,等待任务超时或者任务返回结果再往下执行。如果不做封装,可能会怎么做?每次都进入while true?原创 2022-06-29 22:30:00 · 720 阅读 · 0 评论 -
c++的queue在多线程下崩溃原因分析
我们知道c++的queue和map等数据结构是线程并发不安全的,为此我们常封装实现了线程安全的priority_queue,姑且叫做 thread_safe::priority_queue。(关于c++并发编程这块儿推荐经典书籍《C++并发编程实战》)。本以为封装后就可以放心在多线程中使用了,结果崩溃了,且还是偶发的。.........原创 2022-06-29 22:15:00 · 4200 阅读 · 2 评论 -
c++代码格式化工具神器AStyle介绍
常用的C/C++代码格式优化工具有两个,一是老牌的indent,再一个就是astyle了。astyle不但可以对C/C++进行格式优化,还可以处理Java和C#。版本一直在保持更新,且开放源代码,可以自行编译或使用自带的发布版本。通过命令““astyle -V”可以查询版本信息,最新版本的源代码和可执行文件可以在此处。.........原创 2022-06-24 23:00:00 · 6207 阅读 · 0 评论 -
常用问题排查工具和分析神器,值得收藏
作为软件开发人员,如何才能提升我们的开发效率?如何才能快速地解决开发过程中遇到的何种问题?根据我多年来的开发经历及取得的经验,我们需要掌握一些常用的软件分析工具,借助这些工具,可以快速高效地分析和解决问题。............原创 2022-06-10 21:45:00 · 5564 阅读 · 3 评论 -
windows下的串口编程,串口操作类封装
以往都是在嵌入式设备中经常操作串口,或者使用QT的串口类。在Win32中处理串口也是有办法的,操作文件的打开和读写进行串口的操作。原创 2022-06-09 01:15:00 · 1825 阅读 · 0 评论 -
windows下cpu和性能指标监控Top10的实现
一直以来只在linux下用过好用的top命令,可以显示出排名最前的应用cpu和内存占用情况。windows下虽然有进程管理器,性能监视器perfmon.msc,resmon资源监视器,processhacker神器等众多性能指标监控工具可以用,但就是没法看top10那样的直观。Process Hacker介绍Process Hacker:windows下的一款用于调试和排除软件故障的强大工具 。它可以帮助研究人员检测和解决软件或进程在特定操作系统环境下遇到的问题。除此之外,它还可以检测恶意进程,.原创 2022-05-27 21:45:00 · 2228 阅读 · 3 评论 -
windows下使用性能计数器遇到的坑
性能计数器简介Microsoft Windwos NT/2000 提供了一个强大的API集来访问系统事件和性能数据的众多计数器。我们既可以实时地得到计数器的值,也可以从一个日志文件中读取计数器数据。功能可为强大,而且使用简单。可以用来做什么可以用来监控记录当前 CPU 的使用率、memory 使用率、CPU 占有率 、memory 占有率,获取系统和进程的物理内存,虚拟内存,线程数,句柄数,CPU,网络利用率,磁盘读写速率等。总之,很强大。windows下可以通过perfmon.msc调起系统的原创 2022-05-26 02:00:00 · 1870 阅读 · 0 评论 -
c++优先级队列priority_queue使用lambda表达式出错问题
在c++17下使用lambda可能遇到以下错误提示信息:error: a lambda expression cannot appear in this context。测试代码如下,使用std::priority_queue创建了一个自定义的优先级队列:#include <iostream>#include <queue>int main() { std::cout << "hello test" << std::endl;原创 2022-05-25 00:45:00 · 2969 阅读 · 4 评论 -
理解std::move和std::forward
首先通过了解它们(指std::move和std::forward)不做什么来认识std::move和std::forward是非常有用的。std::move不move任何东西。std::forward也不转发任何东西。在运行时,他们什么都不做。不产生可执行代码。std::move和std::forward只是执行转换的函数(确切的说应该是函数模板)。std::move无条件的将它的参数转换成一个右值,而std::forward当特定的条件满足时,才会执行它的转换。这就是它们本来的样子.这样的解原创 2022-06-07 00:15:00 · 3545 阅读 · 0 评论 -
重温经典设计模式
导语在软工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由埃里希·伽玛(Erich Gamma)等人在1990年代从建筑设计领域引入到计算机科学的,设计模式是针对软件设计中常见问题的工具箱,其中的工具就是各种经过实践验证的解决方案。即使你从未遇到过这些问题,了解模式仍然非常件有用,因为它能指导你如何使用面向对象的设计原则来解决各种问题。今天谈一谈设计模式,一名优秀的开发,应该多少都需要了解一些常用的设计模式和使用场景,让我...转载 2022-05-22 13:15:00 · 342 阅读 · 0 评论 -
c++17好用的新特性总结
自从C++11开始,标志着c++的复兴和现代C++的开端。尽管有各种新语言层出不穷,但涉及性能和系统层面c++仍然是首选,地位无可撼动。比如最近很火的鸿蒙系统框架代码,很多就是基于c++做的底层、运行时和应用框架封装。c++11后续又有11,14,17,20等众多新版本。哪个是主流?截至目前来说,c++17应该是新项目的首选。C++14在11的基础上查缺补漏,并未加入许多新特性,而C++17作为C++11后的第一个大版本,标志着现代C++逐渐走向成熟。这里总结下C++17在业务代原创 2022-05-20 10:51:37 · 17489 阅读 · 0 评论