
C/C++
C/C++
Michael_Good
脚踏实地,不负时光!
展开
-
[GTEST] 笔记下使用过程遇到的事情
在写单测模块时,需要使用CPP进行编码。具体是为什么,还不太清楚。使用C进行写单测,会报错。原创 2025-03-04 19:44:22 · 128 阅读 · 0 评论 -
【架构设计】黑盒测试vs白盒测试
● 定义:黑盒测试是指在不了解程序内部结构或代码的情况下对软件进行测试。黑盒测试侧重于验证软件的功能性,而白盒测试则侧重于验证软件的内部逻辑和结构。● 定义:白盒测试是指测试人员清楚地知道被测软件的内部工作过程,并且根据程序内部的逻辑结构设计测试用例进行测试。● 关注点:更注重于软件内部逻辑、数据流及控制流等细节,旨在检查程序的内部动作是否按照设计规范正确运行。● 关注点:主要关注软件功能是否按照需求规格说明书来实现,而不关心程序内部是如何实现这些功能的。○ 可能会遗漏一些由于程序内部逻辑错误引起的缺陷。原创 2025-01-18 15:24:13 · 157 阅读 · 0 评论 -
【C/C++】C++类实现了拷贝构造,但未实现移动构造,使用std::move传递数据,结果是什么?
如果类包含不能被移动的成员(比如那些只提供了拷贝构造函数而非移动构造函数的成员),即使你定义了移动构造函数,也无法对这些成员进行移动,只能选择拷贝它们。不会如预期那样进行移动,而是会调用相应的拷贝操作符。这是因为一旦你定义了任何一个拷贝控制成员,编译器就不会为你自动生成移动操作符。如果你的类定义了自己的拷贝构造函数、拷贝赋值操作符或析构函数,但没有定义移动构造函数或移动赋值操作符,那么使用。如果类没有定义任何拷贝控制成员(即拷贝构造函数、拷贝赋值操作符、析构函数),并且所有成员都可以被移动,则。原创 2025-01-16 14:49:24 · 187 阅读 · 0 评论 -
【C/C++】#pragma pack(1)与#pragma pack(push,1)的区别
二者区别不大,但是从变动方面来说,第一种方式需要改动编译器默认值,相对而言,第二种,稍好。二者都是,编译器设置参数的方法。原创 2025-01-16 14:07:37 · 394 阅读 · 0 评论 -
【Linux】container_of 的使用心得。
总结下container_of的原理。原创 2025-01-11 14:39:07 · 138 阅读 · 0 评论 -
libpcap、Winpcap、Npcap三者关联与区别
Libpcap主要服务于类Unix系统,WinPcap将其功能扩展到了Windows环境,而Npcap则在此基础上进一步增强了功能、性能及安全性,成为目前Windows平台上推荐使用的库。原创 2025-01-10 13:29:49 · 567 阅读 · 0 评论 -
【C/C++】同步锁的选择(基于性能场景)
仅需要在单个进程中进行同步,且锁的竞争不是很激烈,则建议 CriticalSection需要支持多个读者或跨进程同步,则需要考SRW Locks 或者 Mutex锁的竞争特别激烈,则考虑无锁机制或者利用Interlocked进行设计自定义同步就机制。原创 2025-01-09 13:52:07 · 105 阅读 · 0 评论 -
【C/C++】windows平台同步锁机制种类
CriticalSection:Mutex(互斥量):Semaphore(信号量):Slim Reader/Writer (SRW) Locks:Interlocked Functions:Condition Variables:Event Objects:原创 2025-01-09 13:44:45 · 482 阅读 · 0 评论 -
【计算机网络】wireshark 导出C语言二进制数组数据
在我们平时的开发过程中,可能从 wireshark 面板数据包->数据包右击中-> 复制-> …as Raw Binary 可能会出现失败。OK , 设置完成,导出至磁盘,磁盘上就会有一个二进制文件,还是以C语言char数组的形式存放。所以,现在找到了其他的方法,留个笔记。原创 2025-01-08 09:21:15 · 131 阅读 · 0 评论 -
【C/C++】Protobuf与nlohmann/json的比较
特性Protobufnlohmann/json数据格式二进制格式,紧凑,不可读文本格式,可读性强性能序列化/反序列化速度快,内存占用小序列化/反序列化速度慢,内存占用大跨语言支持多语言支持,代码生成广泛的语言支持,无需代码生成学习曲线学习成本高,文档丰富学习成本低,API简洁易用扩展性和灵活性强类型系统,字段编号,向后兼容性好弱类型系统,动态性高,灵活性好生态系统成熟的生态系统,官方支持,gRPC等轻量级库,社区活跃,单头文件集成原创 2025-01-06 14:20:21 · 316 阅读 · 0 评论 -
【C/C++】C++新特性实践方向
C++ 新特性核心内容,主要关注点:原创 2025-01-06 11:04:29 · 185 阅读 · 0 评论 -
【C/C++】nlohmann::json从文件读取json,并进行解析打印,实例DEMO
使用 json::parse 函数将JSON格式的字符串解析为 nlohmann::json 对象。这个函数支持多种输入源,包括字符串、文件流等。原创 2025-01-03 12:01:36 · 384 阅读 · 0 评论 -
【C/C++】nlohmann::json的优劣
最近在使用作为数据结构辅助,进行分析了下nlohmann::json的优劣,以及适用的场景。原创 2025-01-03 11:59:00 · 1416 阅读 · 0 评论 -
【C/C++】C语言打印十六进制数据
2、使用PRIx64 和 PRIu64 宏(需要头文件 inttypes.h,支持跨平台)1、使用 "%llu"格式说明符。原创 2025-01-02 13:51:59 · 984 阅读 · 0 评论 -
【C/C++】大小端转换-大端转为小端
【代码】【C/C++】大小端转换-大端转为小端。原创 2024-12-30 11:33:56 · 262 阅读 · 0 评论 -
【C/C++】大小端转换
【代码】【C/C++】大小端转换。原创 2024-12-30 11:31:43 · 290 阅读 · 0 评论 -
【C/C++】VS2022生成DLL时,输出的导入库名称的修改方法
我们若是开发一个 xx.dll ,则一种对外符号方式是通过导入库的形式,即生成目录下会存在一个 xx.lib ,其他项目若是想使用 xx.dll ,则需要在其项目链接器中添加 xx.lib , 否则会出现符号找不到的情况。当然,大家也可以直接使用函数地址偏移。原创 2024-12-27 14:32:03 · 323 阅读 · 0 评论 -
【C/C++】C语言编程规范
● 使用表达式定义常量时,必须用括号括起来,避免在使用时由于操作符优先级导致的异常结果;同样,对于函数形式的宏,每个参数在函数体中都要用括号括起来。● 使用GOTO时,标签名需要有实际意义,例如说明后续代码的意图,说明走到该分支的原因等。● 对于#if、#ifdef、#elif等预处理指令,由于关键字后就是判断条件,不需要添加注释。● 如果函数形式的宏包含未使用的参数,请使用static inline函数,不要使用宏。● 如果函数中使用的临时变量超过10个,它的功能可能过于复杂了,需要考虑如何拆分。原创 2024-12-26 11:23:19 · 1021 阅读 · 0 评论 -
【C/C++】位图使用的意义
内存管理:操作系统和内存管理器可以使用位图来跟踪内存块的分配情况,每个位表示一个内存块是否被占用。文件系统:文件系统可以使用位图来管理磁盘块的分配,每个位表示一个磁盘块是否可用。进程调度:操作系统可以使用位图来管理进程的优先级或资源分配,每个位表示一个进程的状态或资源是否可用。图像处理:位图可以用于表示二值图像,其中每个位表示一个像素的颜色(0 表示黑色,1 表示白色)。网络协议:网络协议使用位图来表示选项或标志,例如 TCP 头部中的控制位。原创 2024-12-25 19:40:44 · 94 阅读 · 0 评论 -
【C/C++】VS studio如何开关ClangFormat
步骤如下,希望可以帮到大家。原创 2024-12-24 10:02:53 · 141 阅读 · 0 评论 -
【C/C++】推荐一个性能优良的错误码打印机制,已实测!
但是,基于灵活可扩展思想,我们的错误码是与日俱增的,所以,如何能不写很多switch-case语句,是我们的一个思考点。基于上1篇 switch与for的性能比较文章,若我们在开发一个较大型的系统架构,则错误码机制是必不可少的。下面是在下拙见,抛砖引玉,希望可以给大家一些帮助。大家可以试着用一用!希望可以帮助到各位。原创 2024-12-23 14:06:52 · 370 阅读 · 0 评论 -
【C/C++】关于switch与for循环比对的性能优劣讨论
switch 语句:在处理有限且连续的整数状态时,switch 语句通常具有更好的性能,尤其是当编译器生成跳转表时。if-else 语句:在处理非连续或动态的状态时,if-else 语句可能是更好的选择,尤其是在状态数量较多且不固定的情况下。当 case 标签是连续的整数时,switch 的性能非常好,因为编译器可以生成跳转表,使得查找时间接近常数时间 O(1)。如果 for 循环内部包含复杂的逻辑(如大量的条件判断),可能会导致性能下降,尤其是在没有编译器优化的情况下。测试 switch 语句。原创 2024-12-23 11:55:15 · 623 阅读 · 0 评论 -
【C/C++】头文件中应该使用#define作为保护,还是使用#pragma once进行保护?
一般,可以在自写demo或者验证代码时,可以使用#pragma once,但是,集成时,要优化调整。#pragma once 无法解决一个场景问题:相同的一份头文件,在仓库中存在多份,则无法保护。为什么不适用#pragma once?#define 形式的保护,则可以。原创 2024-12-16 14:39:14 · 387 阅读 · 0 评论 -
【C/C++】关于C/C++中指针类型“*“跟随变量名或者类型
声明或定义指针变量或者返回指针类型函数时,“*” 靠左靠右都可以,但是不要两边都有或者都没有空格。选择"*"跟随类型风格时,避免一行同时声明带指针的多个变量。// 不可以: 很容易将 b 误理解成指针。// 不可以: 两边都没空格。// 不可以: 两边都有空格。选择"*"跟随变量风格时,可能会存在无法紧跟的情况。无法跟随时就不跟随,不要破坏风格一致性。原创 2024-12-16 14:24:28 · 270 阅读 · 0 评论 -
【C/C++】事件驱动架构中,高性能位移操作事件状态位的优势
会清除EVENT_ONE的状态,而不会影响其他标志的状态。原创 2024-12-14 11:35:36 · 915 阅读 · 0 评论 -
【C/C++】使用位移操作符定义枚举成员的性能优势,以及实践场景
在 C 或 C++ 中,使用位移操作符(原创 2024-12-14 11:26:45 · 797 阅读 · 0 评论 -
【C/C++】序列化使用Json还是Protocol Buffer?
个人见解,仅供参考!原创 2024-11-15 15:14:56 · 239 阅读 · 0 评论 -
【C/C++】总结要使用extern “C“的场景,以及何时使用
导出和导入 DLL 函数:如果使用 C 链接方式,需要使用 extern “C”。包含 C 库的头文件:通常需要在头文件中使用 extern “C”。函数指针:指向 C 函数的函数指针需要使用 extern “C”。从 C++ 调用 C 函数:必须使用 extern “C”。从 C 调用 C++ 函数:必须使用 extern “C”。原创 2024-11-12 15:11:11 · 266 阅读 · 0 评论 -
【C/C++】在 Windows 中,LoadLibrary 加载动态链接库(DLL),多次调用加载同一个DLL,会出现多个DLL被加载吗?
在我们平时开发过程中,会遇到多次调用加载同一个DLL的场景,这样会不会多次加载,有冗余呢?在 Windows 中,函数用于加载动态链接库(DLL)。经过代码测试,答案是。不会重复加载同一个 DLL 多次,而是会返回已经加载的 DLL 的句柄。原创 2024-11-11 14:11:35 · 871 阅读 · 0 评论 -
【ZeroMQ 】ZeroMQ中inproc优势有哪些?与其它传输协议有哪些不同?
inproc是 ZeroMQ 提供的一种传输协议,用于在之间进行高效的通信。与其他传输协议(如tcpipc等)不同,inproc专门针对线程间通信进行了优化,具有极低的延迟和开销。以下是inproc。原创 2024-11-08 16:58:15 · 600 阅读 · 0 评论 -
【C/C++】CreateThread 与 _beginthreadex, 应该使用哪一个?为什么?
兼容性:如果你的应用程序大量使用 CRT 函数,建议使用来创建线程,以确保 CRT 的正确初始化和线程安全。性能:对于不涉及 CRT 函数的简单线程,可能稍微快一些,因为它绕过了 CRT 相关的初始化。推荐实践:为了代码的安全性和可维护性,推荐使用或 C++11 及以后的,它们提供了更好的线程管理和 CRT 支持。原创 2024-11-08 14:13:06 · 397 阅读 · 0 评论 -
QtCreator中使用MSVC2017-x64编译器出现Error: lnk1257 代码生成失败
【代码】QtCreator中使用MSVC2017-x64编译器出现Error: lnk1257 代码生成失败。原创 2024-09-19 14:45:05 · 307 阅读 · 0 评论 -
【Windows C/C++】关于Windows平台开发,文件路径名最大长度限制,可防止内存溢出
最近发现个有意思的问题,在Windows平台开发,输入文件名时,需要为此开辟内存,到底开多大?原创 2024-09-12 16:33:50 · 247 阅读 · 0 评论 -
【C/C++】对于 extern “C“ 的一些认识
最近,在开发底层的一些库,所以涉及到了底层API的设计与编码工作。有一些思考与总结,记录一下。原创 2024-09-11 15:55:07 · 277 阅读 · 0 评论 -
什么时候使用指针?什么时候使用引用?什么时候应该按值传递
在纯C语言开发中,仅对于较小的内置类型数据进行值传递,其他,都建议使用指针进行传递。2、传输过程中,仅传递了引用,提高了函数调用效率;在平时开发过程中,会遇到传参类型选择的问题。1、调用者可修改函数中的数据值;原创 2024-09-09 11:48:41 · 367 阅读 · 0 评论 -
【C/C++】VS编译错误ERROR:#error: Building MFC application with /MD[d] (CRT dll version) requires MFC share
大白话:我们自己的库,链接了系统运行时库,链接模式不对。这种问题一般多发生在静态库lib中。原创 2024-09-06 18:10:15 · 406 阅读 · 0 评论 -
【C/C++】VS编译问题:C3861 “__stosb“找不到标识符,”_InterlockedDecrement”: 找不到标识符
这个C3861 error的问题,切入点对了,就好搞,如果起步错了,就头疼了。原创 2024-09-06 18:00:41 · 468 阅读 · 0 评论 -
【C/C++】Linux\Windows为什么频繁使用size_t
在32位系统上,size_t 通常是 unsigned int,而在64位系统上,它通常是 unsigned long 或 unsigned long long。例如,malloc 和 calloc 函数返回 void* 类型的指针,而它们的参数类型是 size_t,这允许函数接受任何大小的整数值作为参数,而无需担心类型不匹配。例如,strlen 函数返回一个 size_t 类型的值,表示字符串的长度;由于它是无符号的,因此在进行算术运算时,不会出现负数结果,这有助于避免一些常见的错误,如数组越界。原创 2024-09-06 11:47:00 · 365 阅读 · 0 评论 -
【多线程】阻塞,忙等待,睡眠,挂起的简单理解,以及各自优缺点
阻塞和睡眠通常用于等待外部事件(如I/O操作完成、定时器到期等),它们通过减少CPU资源的浪费来提高系统的整体效率。忙等待适用于预期条件很快就会满足的情况,它避免了上下文切换的开销,但会浪费CPU资源。挂起用于更复杂的同步场景,它允许操作系统精确控制线程或进程的执行,但管理开销较大。原创 2024-09-04 15:07:42 · 1183 阅读 · 0 评论 -
【多线程】二进制信号量与互斥锁的不同,以及优势在哪里?
二进制信号量:本质上是一种特殊的信号量,其计数器的值只能是0或1。互斥锁:某些互斥锁实现支持递归锁定,允许同一个线程多次获取同一个锁。互斥锁:由于其设计用于保护临界区,可能涉及更复杂的内部状态管理,这可能导致性能略低于二进制信号量。互斥锁:是一种更专门的同步机制,用于保护临界区,防止多个线程同时执行临界区内的代码。二进制信号量:由于其操作简单(只有两种状态),通常在性能上优于互斥锁。二进制信号量可以作为互斥锁的替代品,用于实现线程间的互斥访问共享资源。二进制信号量的概念和使用方法相对直观,易于理解和使用。原创 2024-09-04 10:01:57 · 353 阅读 · 0 评论