
C++
文章平均质量分 89
以实战为线索,深入研究技术细节。提升工程化编码能力和思维能力。总结、沉淀、积累。
特立独行的猫a
csdn技术男猫哥,高级嵌入式软件工程师、c++软件工程师、全栈工程师。专注分享c++、QT、嵌入式linux、Android、HarmonyOS、前端小程序、AIoT(物联网+人工智能)、单片机、通信技术、开发工具等相关内容。
展开
-
MessagePack:在C++中的使用及交叉编译在嵌入式Linux上的使用总结
通过以上步骤,我们就可以在C++项目中使用MessagePack进行数据序列化和反序列化,并且可以将其交叉编译到嵌入式Linux平台上。MessagePack的高性能和小体积特性使其在网络传输和嵌入式系统中具有很大的优势。原创 2025-03-28 08:34:25 · 754 阅读 · 0 评论 -
ZeroMQ介绍及如何交叉编译在嵌入式Linux下使用
ZeroMQ(也称为ØMQ或ZMQ)是一个高性能的异步消息库,用于在分布式或多线程应用程序中传递消息。它提供了套接字抽象,允许开发人员以简单的API设计复杂的消息模式。ZeroMQ的设计宗旨是为高吞吐量、低延迟的消息传递提供支持,适用于需要快速、可靠和可扩展的数据传输的场景。ZeroMQ是一个强大且灵活的消息传递库,适合多种场景,尤其是在嵌入式Linux系统中。通过交叉编译,您可以轻松将ZeroMQ集成到嵌入式项目中,为您的应用提供高性能的消息传递能力。希望本文对您在嵌入式环境中使用ZeroMQ有所帮助!原创 2025-03-27 20:57:45 · 397 阅读 · 0 评论 -
c++ 日志框架G3log介绍及在嵌入式Linux上的移植(交叉编译)
G3log 是一个开源、支持跨平台的异步 C++ 日志框架,支持自定义日志格式。基于 g2log 构建,提升了性能,支持自定义格式。它继承了g2log的优点,如轻量级、易用性及出色的性能表现,并在此基础上进行了大胆革新。项目链接通过对G3log的深入探讨,我们不仅领略了这款日志框架在异步调用、跨平台支持以及线程安全等方面展现出的强大功能,还通过一系列实用的代码示例,直观地感受到了其在实际开发中的便捷与高效。G3log凭借其卓越的性能表现和灵活的配置选项,为C++开发者提供了一个理想的日志解决方案。原创 2025-03-27 20:16:05 · 863 阅读 · 0 评论 -
C++使用ZeroMQ和MessagePack实现简单又轻量级的RPC框架
ZeroMQ(也称为0MQ)是一个高性能的异步消息库,旨在使用标准的、对等的传输协议实现消息的发送与接收。ZeroMQ的核心是提供一个消息队列,使得消息发送和接收更加高效和可靠。ZeroMQ支持多种消息模式,如请求/响应(Request/Reply)、发布/订阅(Publish/Subscribe)等。在上述代码中,ZMQ_REP表示响应模式,用于服务器端,而ZMQ_REQ则用于客户端,发起请求并等待响应。MessagePack是一种高效的二进制序列化库,类似于JSON,但更紧凑、更快。原创 2025-03-15 16:13:08 · 674 阅读 · 0 评论 -
Windows下的C++内存泄漏检测工具Visual Leak Detector (VLD)介绍及使用
VisualC++提供了内置的内存泄漏检测,但其功能相当有限。这个内存泄漏检测器是作为VisualC++内置内存泄漏检测器的一个免费替代品而创建的。以下是VisualLeakDetector的一些特性,这些在内置检测器中均不存在:为每个泄露块提供完整的堆栈跟踪,包括可用时的源文件和行号信息。检测大多数,如果不是所有,类型的进程内内存泄漏,包括基于COM的泄漏和纯Win32堆泄漏。可选择排除特定模块(如DLL甚至主EXE)免于泄漏检测。原创 2025-01-18 23:33:21 · 1560 阅读 · 0 评论 -
C++之美:代码整洁、安全又跑得快的30个要诀(好书推荐)
C++ 是一门历史悠久且功能强大的编程语言,广泛应用于系统开发、游戏引擎、高性能计算等领域。然而,C++ 的复杂性也给开发者带来了不少挑战。本书通过总结和提炼了30个实用的编程要诀,帮助读者写出既整洁、又安全且高效的 C++ 代码。《C++之美:代码简洁、安全又跑得快的30个要诀》从《C++核心准则》(C++ Core Guidelines)中精心挑选了30条准则进行细致、深入的讲解。原创 2024-09-26 20:48:18 · 1669 阅读 · 0 评论 -
Clang-Tidy 的介绍及使用(强大的静态代码分析工具)
Clang-Tidy 是一个强大的 C++ 静态代码分析工具,能够帮助开发者发现和修复代码中的潜在问题。通过配置文件和自动修复功能,你可以更高效地改进代码质量。将其集成到你的构建系统中,可以进一步提高开发效率和代码可靠性。希望本文能帮助你更好地理解和使用 Clang-Tidy,提升你的 C++ 编程技能。原创 2024-09-05 22:45:00 · 3126 阅读 · 0 评论 -
C/C++ 中的算术运算及其陷阱(详解,举例分析)
C/C++中的算术运算虽然基础,但其中隐藏着许多陷阱。程序员在进行算术运算时,需要特别注意整数溢出、浮点数精度问题、除零错误以及类型转换问题,以避免程序出现难以预料的错误。通过本文的介绍和示例代码,希望读者能够更好地理解和避免这些陷阱,编写出更加健壮的C/C++程序。尽可能不要混用无符号数和有符号数,如果一定要混用,请小心谨慎。在涉及不同大小的数据类型时要小心,可能存在溢出和截断。只要存在有符号数就要考虑溢出导致的未定义行为和可能的符号反转。尽量不对小于int。原创 2024-09-05 20:15:00 · 2336 阅读 · 0 评论 -
c++多线程下崩溃一例分析 ACTIONABLE_HEAP_CORRUPTION heap failure block not busy DOUBLE
之前的三个代码接口使用了同一把锁,共享资源的访问是有序执行的没有问题。最近改成各个接口使用单独的锁,结果漏掉了共享资源的保护,于是出现了崩溃。最近与这个崩溃做斗争并定位找到的原因,成功复现了。这里总结下,后续涉及多线程访问的务必考虑周全。原创 2024-09-02 20:15:00 · 1115 阅读 · 0 评论 -
浅谈 C++ 元编程
随着 C++ 11/14/17 标准的不断更新,C++ 语言得到了极大的完善和补充。元编程作为一种新兴的编程方式,受到了越来越多的广泛关注。结合已有文献和个人实践,对有关 C++ 元编程进行了系统的分析。首先介绍了 C++ 元编程中的相关概念和背景,然后利用科学的方法分析了元编程的演算规则、基本应用和实践过程中的主要难点,最后提出了对 C++ 元编程发展的展望。转载 2024-07-20 19:36:18 · 298 阅读 · 0 评论 -
c++信号和槽机制的轻量级实现,sigslot 库介绍及使用
sigslot是一个轻量级的 C++ 信号和槽库,它提供了一种类型安全的机制来处理对象之间的通信。信号和槽机制允许对象在状态变化时通知其他对象,而无需直接调用它们的成员函数。这种机制有助于减少对象之间的耦合,使代码更易于维护和扩展。sigslot是一个轻量级且易于使用的信号和槽库,适用于需要简单信号和槽机制的项目。虽然它的功能相对简单,但对于许多应用场景来说已经足够。如果你正在寻找一个轻量级的解决方案,sigslot是一个值得考虑的选择。原创 2024-07-16 21:56:20 · 1359 阅读 · 0 评论 -
NDD(notepad--)的AI机器人插件制作过程
兴趣是最好的老师。周末晚上熬夜到半夜十二点多,花了几个钟头给NDD制作了一款AI搜索问答插件,时间仓促界面较丑,后续插件代码开源并维护和美化。Notepad记事本工具挺常用的,把AI接口接入进来使用起来方便多啦,直接在上面搜索问答。这里记录下详细过程,分享给有需要的小伙伴。原创 2023-03-18 21:28:04 · 4173 阅读 · 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 · 1291 阅读 · 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 · 1928 阅读 · 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 · 2156 阅读 · 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 · 2689 阅读 · 4 评论 -
c++ 职责链+策略模式,实现链式过程处理
想象一下一件商品的加工,需要经过多道工艺流程处理。这一道道工艺流程就像是一个职责链,从头到尾传递。就好像网络传输时,消息发送到对端主机,经过协议栈,在这个过程中,它在不同的协议栈层级中被一层层抽丝剥茧,剥掉ip头,脱下tcp头,扯掉http头。又像清丽的舞娘不再犹抱琵琶,缓缓揭开自己面纱,犹如李清照《一剪梅》中的“轻解罗裳,独上兰舟”,最后对端的层得到了自己想要的东西。原创 2023-07-21 21:45:00 · 534 阅读 · 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 · 1141 阅读 · 0 评论 -
关于B+树的介绍、用途和c++代码实现
数据结构和算法的重要性不言而喻,一些优秀的开源项目的核心和灵魂就是数据结构、算法。在实际的编程中我们经常可以在各种框架、算法中看见B树、B+树的身影。特别是在数据库的数据库引擎中,它们更是占据着重要的地位。 下面我将通过简单的二叉树,到树的进化,多叉树(B树、B+树)的由来、作用、操作以及它们在实际中的应用依次进行详细说明。原创 2023-05-12 01:15:00 · 3760 阅读 · 0 评论 -
Powerlink协议在嵌入式linux上的移植和主从站通信(电脑和linux板通信实验)
使用最新的openPOWERLINK 2.7.2源码,业余时间搞定了Powerlink协议在嵌入式linux上的移植,并进行了下电脑和linux开发板之间的通信实验。添加了一个节点配置,跑通了源码中提供的主站和从站的两个demo。这里总结下移植过程分享给有需要的人。在嵌入式linux下的移植还是蛮简单的,相信即便移植到单片机中也不是什么难事。挺好玩的,感兴趣的可以尝试尝试。原创 2023-05-09 22:19:34 · 2086 阅读 · 6 评论 -
替代notepad++,notepad--介绍及插件cmake编译
Notepad++ 是一个文本编辑器小软件,用来替代windows自带的记事本。然而Notepad++软件的作者太霸道,如果你不赞同他的观点,Notepad++将会在你的源码里面插入随机字符。推荐一款国产的开源跨平台软件NDD(notepad--),功能一点儿不弱,体积小巧打开速度快,且带有文件夹比对功能,连收费的beyondCompare都省了。且可以为它贡献插件啦,添加一些有意思的功能,比如我想给它添加个ChatGPT聊天机器人插件。期待更多优秀的国产软件,为国产化崛起贡献力量。原创 2023-03-16 22:45:00 · 5199 阅读 · 0 评论 -
c++插件化 NDD源码的插件机制实现解析
插件机制是一种框架,允许开发人员简单地在应用程序中添加或扩展功能。它使广泛使用,因为它可以作为模块被重复使用,并使它们更易于维护和扩展,因此它们在应用程序中非常有用。插件机制允许管理员在需要时轻松安装和卸载插件,而无需对基础应用程序做出更改。原创 2023-03-17 21:45:00 · 1149 阅读 · 0 评论 -
C++常用的11种设计模式解释及示例
c++常用的设计模式包括单例模式、工厂模式、抽象工厂模式、适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式、观察者模式和命令模式等。使用设计模式的好处:提高代码的可读性和可维护性;将常见的设计问题隔离程序的业务逻辑;重用已有的实现;消除重复代码;消除手动调整代码以达到正确逻辑的所有痛苦。原创 2023-02-06 21:45:00 · 7288 阅读 · 0 评论 -
windbg抓一个windows蓝屏分析
设备一直以来挺稳定,但还是小概率事件意外出现某设备突然蓝屏了。查看windows事件查看器提示计算机已经从检测错误后重新启动。检测错误: 0x0000009f (0x0000000000000003, 0xffffad0f4edc7570, 0xfffff8046a09ec20, 0xffffad0f4ef318a0)。已将转储的数据保存在: C:\Windows\MEMORY.DMP。原创 2023-01-30 23:00:00 · 14103 阅读 · 0 评论 -
c++开源协程库libgo介绍及使用
协程这个概念,最近这几年可是相当地流行了。尤其 go 语言问世之后,内置的协程特性,完全屏蔽了操作系统线程的复杂细节。甚至使 go 开发者“只知有协程,不知有线程”了。当然 C++也有高性能的协程库,比如我了解到的微信团队的libco、魅族的libgo、以及libcopp,开源libaco、boostcoroutine,cppcoro。阿里的基于c++20特性封装好用的雅兰亭库。原创 2023-01-14 22:15:00 · 8018 阅读 · 4 评论 -
C++可变参数使用总结
可变参数是指函数可以接受不定数量的参数。比如在printf函数,如果做日志等功能也会用到。这里总结下可变参数的使用。c语言中的可变参数先介绍下在c语言中的使用,c语言也支持可变参数,只是需要借助下va_list和va_arg宏解析。原创 2022-12-28 22:15:00 · 2824 阅读 · 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 · 3871 阅读 · 0 评论 -
c++状态机的使用
状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。英文名字叫State Machine ,不是指一台实际机器,一般就是指一张状态转换图。全称是有限状态自动机,自动两个字包含重要含义。给定一个状态机,同时给定它的当前状态以及输入,那么输出状态时可以明确的运算出来的,当输入条件时,能输出下一个状态。原创 2022-12-07 21:22:07 · 7222 阅读 · 1 评论 -
现代c++中实现精确延时方法总结
程序中实现延时有很多种办法,但是有些不建议用。比如还在用sleep()或者空转计数的方式延时?要么移植性不好,要么不够精确且效率太低。这里总结下现代c++中推荐的一种实现精确延时的方法。原创 2022-11-19 20:15:00 · 7715 阅读 · 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 · 4901 阅读 · 0 评论 -
c++回调函数详解及实现(lambda)
回调函数就是一个被作为参数传递的函数。在C语言中,回调函数只能使用函数指针实现,在C++语言中还可以使用仿函数或匿名函数。回调函数的使用可以大大提升编程的效率,这使得它在现代编程中被非常多地使用。原创 2022-08-20 23:00:00 · 8063 阅读 · 0 评论 -
log4cplus最新介绍、详细编译过程及使用(最全面)
log4cplus是C++编写的开源的日志系统很有名也很强大,但网上大多的资料都是讲如何配置使用。关于编译过程一笔带过,尤其是windows下的编译过程少之又少。得先有编译这个提才有后续的使用,里面的坑也少有提及。以下对详细的编译过程和使用做个完整总结。log4cplus具有线程安全、灵活、以及多粒度控制的特点,通过将日志划分优先级使其可以面向程序调试、运行、测试、和维护等全生命周期。你可以选择将日志输出到屏幕、文件、............................................原创 2022-08-15 23:15:00 · 13967 阅读 · 6 评论 -
c++的lambda使用注意事项,可能导致的崩溃问题分析
Lambda表达式是现代C++的一个语法糖,挺好用的。但是如果使用不当,会导致内存泄露和潜在的崩溃问题。这里总结下Lambda表达式的使用注意事项,避免在使用中的一些陷阱。原创 2022-08-11 21:45:00 · 2863 阅读 · 0 评论 -
c++的ThreadPool,OpenHarmony源码实现版赏析和使用
c++11虽然加入了线程库thread,然而 c++ 对于多线程的支持还是比较低级,稍微高级一点的用法都需要自己去实现。比如备受期待的网络库至今标准库里还没有支持,常用acl或asio替代。鸿蒙OpenHarmony源码中的网络栈模块部分,也是十分漂亮的实现,值得好好学习研究。...........................原创 2022-08-10 23:00:00 · 2820 阅读 · 0 评论 -
浅谈c++单元测试
什么是单元测试?单元测试是指,对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,这里的最小可测试单元通常是指函数、接口或者类。单元测试贯穿在开发的整个过程,并伴随着新功能模块的产生而进行。单元测试并不会花费更多的时间,与之相反,在提高代码效率、减少bug数量、有序开展开发工作上,单元测试发挥着很大的作用。...........................原创 2022-08-02 22:30:00 · 4498 阅读 · 0 评论 -
c++基于ThreadPool实现灵活的异步任务
在工作中有时会有这种需求,在延时中执行一些任务,等待任务超时或者任务返回结果再往下执行。如果不做封装,可能会怎么做?每次都进入while true?原创 2022-06-29 22:30:00 · 764 阅读 · 0 评论 -
c++的queue在多线程下崩溃原因分析
我们知道c++的queue和map等数据结构是线程并发不安全的,为此我们常封装实现了线程安全的priority_queue,姑且叫做 thread_safe::priority_queue。(关于c++并发编程这块儿推荐经典书籍《C++并发编程实战》)。本以为封装后就可以放心在多线程中使用了,结果崩溃了,且还是偶发的。.........原创 2022-06-29 22:15:00 · 4429 阅读 · 2 评论 -
c++代码格式化工具神器AStyle介绍
常用的C/C++代码格式优化工具有两个,一是老牌的indent,再一个就是astyle了。astyle不但可以对C/C++进行格式优化,还可以处理Java和C#。版本一直在保持更新,且开放源代码,可以自行编译或使用自带的发布版本。通过命令““astyle -V”可以查询版本信息,最新版本的源代码和可执行文件可以在此处。.........原创 2022-06-24 23:00:00 · 6505 阅读 · 0 评论 -
常用问题排查工具和分析神器,值得收藏
作为软件开发人员,如何才能提升我们的开发效率?如何才能快速地解决开发过程中遇到的何种问题?根据我多年来的开发经历及取得的经验,我们需要掌握一些常用的软件分析工具,借助这些工具,可以快速高效地分析和解决问题。............原创 2022-06-10 21:45:00 · 5891 阅读 · 3 评论 -
windows下的串口编程,串口操作类封装
以往都是在嵌入式设备中经常操作串口,或者使用QT的串口类。在Win32中处理串口也是有办法的,操作文件的打开和读写进行串口的操作。原创 2022-06-09 01:15:00 · 1933 阅读 · 0 评论