C/C++
文章平均质量分 73
C/C++
witton
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
xmake简介及使用自定义规则处理proto文件
本文简单介绍了xmake及其使用,还深入介绍了如何使用自定义规则来处理proto文件。原创 2026-08-25 15:29:40 · 302 阅读 · 0 评论 -
GMP库使用简介
本文介绍了高性能大数计算库GMP的基本使用方法,重点演示了mpz_t整数的初始化、赋值、转换和算术运算等核心功能。通过MinGW或Ubuntu的包管理器可快速安装GMP库,MSVC需手动编译。文章以整数运算为例,详细说明了内存管理、数值转换和基本算术运算函数的使用方法,并建议结合斐波那契数列测试对比不同语言的性能表现。最后提供了GMP官方文档链接以便进一步学习。该库特别适合需要高精度计算的场景,如密码学、科学计算等领域。原创 2026-08-19 15:30:38 · 221 阅读 · 0 评论 -
C语言中嵌套捕获异常
本文介绍了在C语言中模拟C++异常处理机制的方法。通过使用setjmp和longjmp函数配合信号处理,实现了类似try/catch的异常捕获功能。文章展示了基础实现方案,并针对嵌套捕获问题提出了改进方法:使用jmp_buf数组和深度计数器来管理多级异常处理。示例代码演示了如何捕获段错误(SIGSEGV)和除零错误(SIGFPE)等异常情况。这种技术为C程序提供了更结构化的错误处理方式,但需要注意其与标准C++异常处理的差异。原创 2026-01-30 12:10:37 · 156 阅读 · 0 评论 -
使用Clang编译内联intel语法汇编的C/C++项目
我们在编写C/C++代码时,如果在有较高性能需求的时候,可以使用汇编代码来编写相应的函数,C/C++直接调用即可。汇编的语法格式有两种,一种是我们在Windows下常见的Intel的语法格式;另一种是GCC下使用的AT&T格式的语法,这种语法对我们经常使用Windows或者从Windows开始学习编程的开发人员来说会感觉很晦涩。C/C++提供了外联与内联两种方式来与汇编代码进行交互,不过内...原创 2019-12-09 11:11:37 · 5450 阅读 · 1 评论 -
CMake 3.30中使用import std引入C++标准库
本文介绍了如何在CMake项目中支持引入C++标准库模块std,即在代码中使用`import std`引入标准库模块。原创 2025-09-17 11:58:16 · 881 阅读 · 0 评论 -
解决MinGW下NASM汇编代码无调试信息的问题
本文介绍如何解决在MinGW下无法使用GDB调试NASM汇编源码的问题。原创 2025-08-26 17:55:20 · 437 阅读 · 0 评论 -
C语言实现类似C#的格式化输出
本文介绍并一步步使用C语言实现了类似C#的格式化输出,比如:printx("Char: {0}\n", (char)'A');原创 2025-08-15 14:37:33 · 1077 阅读 · 0 评论 -
x86版Ubuntu的容器中运行ARM版Ubuntu
本文介绍了在x86 CPU架构的Ubuntu系统中,使用容器运行arm版本的Ubuntu,以及在使用GDB调试时遇到的问题。原创 2025-07-16 17:18:58 · 1187 阅读 · 0 评论 -
C语言使用Protobuf进行网络通信
本文介绍了在C语言中使用protobuf-c解析Protobuf消息的实现方法。针对protobuf-c生成代码中的命名风格不一致问题,作者提出通过修改生成器代码添加typedef来统一命名格式。文章详细阐述了DEFINE_HANDLER宏的实现机制,该宏既能注册消息处理函数,又能完成消息解析和调用自定义处理函数的功能。同时,作者分享了自己向protobuf-c项目提交命名风格改进建议的经历,并提供了具体的代码修改方案。这种方法简化了网络消息处理流程,提高了代码的可读性和维护性。原创 2025-07-08 18:32:42 · 1231 阅读 · 0 评论 -
美化显示MSVC调试的数据结构
本文以mupdf库为例,介绍MS调试器如何美化显示调试时的数据结构。原创 2025-06-13 18:43:41 · 1316 阅读 · 0 评论 -
美化显示LLDB调试的数据结构
美化显示LLDB调试的数据结构,本文以mupdf库为例,详细介绍如何编写Python脚本来美化C/C++中的数据结构,以及如何调试LLDB的Python脚本。原创 2025-06-05 18:28:10 · 1355 阅读 · 0 评论 -
美化显示GDB调试的数据结构
美化显示GDB调试的数据结构,本文以mupdf库为例,详细介绍如何编写Python脚本来美化C/C++中的数据结构。原创 2025-05-29 16:38:15 · 1242 阅读 · 0 评论 -
C++ lambda表达式转成普通的函数指针
C++ lambda表达式,如何转成普通的函数指针进行函数参数传递?原创 2025-01-17 11:51:26 · 1258 阅读 · 0 评论 -
SwissTable详解
最近在看到一文说Go 1.24有一项重大的性能改进,就是将默认的Map由原来的拉链式HashTable改为使用开放式的SwissTable,实现了性能的大幅提升。于是就查了一下SwissTable相关资料,它是由Google工程师在开源库absl中实现的一种Hash算法。本文就与大家一起来研究一下它。原创 2025-01-15 13:08:20 · 1487 阅读 · 5 评论 -
C语言面的向对象编程(OOP)
如果使用过C++、C#、Java语言,一定知道面向对象编程,这些语言对面向对象编程的支持是语言级别的。C语言在语言级别不支持面向对象,那可以实现面向对象吗?原创 2025-01-02 18:38:04 · 632 阅读 · 0 评论 -
windows下glib库的编译与调试
glib库是一个纯C库,源于GIMP,它是GIMP、GTK/GTK+以及GNOME等的基石库,在Linux下起作举足轻重的作用。对于学习C语言及数据结构,glib库也是一个非常不错的选择。在学习的过程中如果能够调试代码,将会对代码有更直观的理解。原创 2024-12-25 17:01:14 · 1835 阅读 · 0 评论 -
libevent使用IOCP网络模型的示例
这段时间抽空研究了一下强大的网络库libevent,其使用标准C语言编写,支持Windows、Linux、Mac等等主流操作系统,早期版本不支持Windows的IOCP,最新版本已经添加上了,在网上找了一下资料,发现使用IOCP的libevent示例太少,于是结合网上的资料,自己整理编写了一下libevent使用IOCP的小例子。原创 2016-07-01 15:09:59 · 8747 阅读 · 3 评论 -
跨平台宏的写法
(若转载,请注明原出处与作者,作者:Witton) 前段时间在写代码的时候,有一段代码发现用宏比较方便,于是就用宏完成了这段代码,写完之后,看到这段代码是相当的整齐,有一种赏心悦目的感觉。现将之贴出来与大家分享: #define FUNCTION(T,N)\ int GetBase##N##Array()\ {\ return (int)&gCharBaseDat原创 2007-04-30 17:50:00 · 1987 阅读 · 0 评论 -
跨平台函数指针的写法
(若转载,请注明原出处与作者,作者:Witton)前段时间,我在项目中用到了函数指针, 其写法示例如下://Myclass.hclass CMyClass;typedef void (CMyClass:: *MyCALLBACK)();class CMyClass{ MyCALLBACK m_MyHandler[5];protected: v原创 2007-05-11 13:05:00 · 1206 阅读 · 0 评论 -
跨平台UNICODE编程总结
这段时间在架构整个服务器,虽然前段时间受到了5.12汶川8.0级大地震的影响(深切悼念在此次大地震中遇难的同胞们),但是,我的工作还是在不断地向前推进着。为了让我们的服务器能够跨平台(主要是WINDOWS与LINUX),且能支持世界上的各种语言,我写了一个跨平台的且支持UNICODE的库。其实,我在之前也有写过跨平台方面的代码,积累了不少的经验,但在写这个库的过程,还是遇到过许多问题,我觉得其原创 2008-06-16 13:25:00 · 1776 阅读 · 4 评论 -
关于友元函数的跨平台问题
今天我在项目中写了一段代码,这段代码中有两个类A和B,类A中的一个保护成员函数需要访问类B中的私有成员变量,为了简便起见,我将类A中的这个保护成员函数设置成类B的友元函数,在VC下编译通过,没有任何问题。但是在LINUX下编译却出现了错误,说该函数是保护的。在LINUX下我的GCC/G++版本是4.4.1,根据错误提示,我将类A中的那个保护成员函数改为public就OK了。我记得在GC原创 2010-02-03 13:51:00 · 706 阅读 · 0 评论 -
跨平台Unicode编程的一点问题
最近在做一个跨平台的库,想让这个库支持ANSI和UNICODE,但是在LINUX下不像WINDOWS下有那么多UNICODE的函数可供使用,比如fopen在LINUX下并没有像WINDOWS中一样有一个_wfopen,这就需要作另外的处理,这个不是今天想说的问题。 我今天想说的问题是在LINUX下与WINDOWS下都有一个支持UNICODE的函数:wprintf。这个原创 2008-04-24 17:12:00 · 1106 阅读 · 0 评论 -
跨平台模板的写法
(若转载,请注明原出处与作者,作者:Witton) 由于工作的原因,自己写的代码,需要跨平台运行(windows与Linux),但是由于VC编译器与gcc/g++编译器的差别,有的代码,在VC下面编译OK,在Linux下却未必编译得过,下面就是一个典型的例子:请先看一下下面的一段代码是否有问题:#include using namespace std;template原创 2007-04-30 17:10:00 · 1369 阅读 · 0 评论 -
解决Clang 18+不能链接GCC14编译的库的问题
解决Clang18+不能链接GCC编译的库的问题。原创 2024-12-05 10:46:04 · 1644 阅读 · 0 评论 -
MSYS2 MinGW64使用Protobuf新版本踩坑
MSYS2下的MinGW64使用ProtoBuf时遇到的一些问题及解决办法。原创 2024-12-02 11:32:04 · 1054 阅读 · 0 评论 -
KMP模式匹配算法
笔者在网上看到一介绍KMP模式匹配算法的博文,讲得比较详细易懂,特转载分享记录一下。转载 2024-11-28 13:31:27 · 284 阅读 · 0 评论 -
C语言实现Go的defer功能
之前笔者写了一篇博文,介绍了如何在C++语言中实现Go的defer功能,那在C语言中是否也可以实现这样的功能呢?本文就将介绍一下如何在C语言中实现Go的defer功能。我们还是使用为了实现该功能,需要借助编译器的扩展功能,GCC/Clang的cleanup属性,微软目前的编译器不支持该扩展属性,所以本文介绍的方法不适用于微软编译器。原创 2024-10-26 23:00:03 · 1470 阅读 · 0 评论 -
VSCode+clangd让写C/C++代码更丝滑
使用C/C++写了十几二十年的代码了,这两年做的项目都是使用Go语言来写的代码了,主要使用Goland来写Go,写起来是相当的丝滑,自动提示、补充代码就不说了,很多IDE都有的功能,它还支持自动添加代码import包,提示如何修复错误等等。C/C++也有IDE可以做到了,这一切都要归功于LLVM的优秀设计,让编译器实现模块化,出了clang、clangd、clang-tidy等等优秀的产品,真是C/C++爱好者的福音。原创 2024-03-31 18:32:36 · 11148 阅读 · 6 评论 -
ubuntu使用LLVM官方发布的tar.xz来安装Clang编译器
ubuntu系统上的软件相比CentOS更新还是比较快的,但是还是难免有一些软件更新得不那么快,比如LLVM Clang编译器,目前ubuntu 22.04版本最高还只能安装LLVM 15,而LLVM 18 rc版本都出来了。这样就可以正常使用新版本的clang编译器了,如果还有找不到的文件,也可以通过这样的方式添加路径。来说明如何使用LLVM官方发布的tar.xz文件来安装Clang编译器。原创 2024-02-23 19:04:11 · 3855 阅读 · 0 评论 -
解决ubuntu系统cannot find -lc++abi: No such file or directory
ubuntu本身也可以直接通过apt install命令来安装编译好的clang编译器。不过目前22.04版本下最高可安装版本还是停留在LLVM 15。原创 2024-02-23 18:01:30 · 1286 阅读 · 0 评论 -
C++ 20 Module
C++ 20 Module介绍原创 2024-01-23 00:08:13 · 2956 阅读 · 0 评论 -
VSCode使用Makefile Tools插件开发C/C++程序
提起Makefile,可能有人会觉得它已经过时了,毕竟现在有比它更好的工具,比如CMake,XMake,Meson等等,但是在Linux下很多C/C++源码都是直接或者间接使用Makefile文件来编译项目的,可以说Makefile是基石。另外,针对C++ 20的一些特性,像比较流行的CMake工具,目前支持还不完善,如果想要尝鲜C++ 20的一些新特性,比如Module,目前最好是使用Makefile比较方便。,在其后点笔那个的图标按钮,则会弹出所有目标,生成目标如下,选择。在工作区编写一个C++文件,原创 2024-01-18 17:23:20 · 17363 阅读 · 2 评论 -
解决Windows下VSCode控制台乱码问题
我们在Windows使用VSCode编写C/C++程序时,如果代码中的中文字符串使用的是UTF8编码,且代码内没有设置控制台的输出编码,或者编译时没有指定运行时编码(GCC可以在编译时使用。插件,不过该插件是直接使用的Windows的控制台,Windows控制台默认是使用的GBK编码,代码输出UTF8编码的字符串就会出现乱码。clang目前只能是utf-8),则在调试或者运行时,VSCode控制台输出的中文字符可能会为乱码。,这样VSCode中启动的控制台全部会使用UTF8编码输出。原创 2024-01-18 15:36:08 · 3568 阅读 · 0 评论 -
类成员函数大小问题
上周,我一同事,在调试我们项目的时候,发现我写的一段代码中,有一个类成员函数指针数组有大小有点怪异,便叫我过去瞧瞧。有如下一段定义:interface IPLUnknown{ virtual ~IPLUnknown() {}};interface IPLRunnable : public IPLUnknown{ virtual BOOL Init(v原创 2009-11-15 20:56:00 · 1302 阅读 · 1 评论 -
VS2022解决Protobuf compiler version 23.4 doesn‘t match library version 4.23.4
解决VS2022+MinGW+CMake使用Protobuf时,CMake报版本不匹配的问题原创 2023-08-21 14:40:47 · 1771 阅读 · 1 评论 -
解决lldb调试时可能出现的personality set failed: Function not implemented
解决lldb调试时可能出现的personality set failed: Function not implemented原创 2023-08-13 19:47:46 · 2005 阅读 · 0 评论 -
搭建ubuntu容器内C/C++开发调试环境
由于ubuntu容器的C/C++开发调试环境与虚拟机或者实体机的配置有点不一样,所以本文记录一下ubuntu容器的C/C++开发调试环境的搭建。原创 2023-06-05 17:10:30 · 2154 阅读 · 0 评论 -
Visual Studio 2022使用CMake+MinGW+Clang+LLDB作为开发环境
VS 2022使用CMake+MinGW+Clang+LLDB作为开发环境。原创 2023-05-26 16:55:17 · 5376 阅读 · 0 评论 -
Visual Studio 2022 CMake+MinGW+GDB 调试目标程序
Visual Studio 2022 CMake+MinGW+GDB 调试目标程序原创 2023-05-14 23:51:11 · 2116 阅读 · 3 评论 -
CMake自动按目录结构编译Protobuf代码
CMake自动按目录结构编译protobuf代码原创 2023-04-26 17:49:55 · 3101 阅读 · 0 评论
分享