
编程语言
文章平均质量分 69
编程语言
witton
这个作者很懒,什么都没留下…
展开
-
C++ lambda表达式转成普通的函数指针
C++ lambda表达式,如何转成普通的函数指针进行函数参数传递?原创 2025-01-17 11:51:26 · 902 阅读 · 0 评论 -
C语言面的向对象编程(OOP)
如果使用过C++、C#、Java语言,一定知道面向对象编程,这些语言对面向对象编程的支持是语言级别的。C语言在语言级别不支持面向对象,那可以实现面向对象吗?原创 2025-01-02 18:38:04 · 486 阅读 · 0 评论 -
C语言实现Go的defer功能
之前笔者写了一篇博文,介绍了如何在C++语言中实现Go的defer功能,那在C语言中是否也可以实现这样的功能呢?本文就将介绍一下如何在C语言中实现Go的defer功能。我们还是使用为了实现该功能,需要借助编译器的扩展功能,GCC/Clang的cleanup属性,微软目前的编译器不支持该扩展属性,所以本文介绍的方法不适用于微软编译器。原创 2024-10-26 23:00:03 · 1268 阅读 · 0 评论 -
go语言魔法技能go:linkname
go语言魔法技能go:linkname链接使用外部未导出函数原创 2024-02-29 22:59:45 · 951 阅读 · 0 评论 -
C++ 20 Module
C++ 20 Module介绍原创 2024-01-23 00:08:13 · 2183 阅读 · 0 评论 -
使用斐波那契(Fibonacci)数列来测试各大语言的性能
笔者使用最多的语言是C++,目前项目中在使用Go,也使用过不少其它语言,像Erlang,Python,Lua,C#等等。最近看到C#夺冠,首次荣获 TIOBE 年度编程语言,同时也看到网上有不少Java与C#之争的文章,于是就想要来做一个性能比较。这里参与性能比较的是以下几门语言:Go、C#、Java、Python、Erlang。这些语言或语言标准库本身都提供了大数计算的支持,不需要自己实现大数计算或者找额外的库来实现大数计算。原创 2024-01-12 23:59:10 · 1474 阅读 · 4 评论 -
VSCode 搭建Java开发环境
VSCode搭建Java开发环境原创 2024-01-12 22:27:33 · 830 阅读 · 0 评论 -
VSCode搭建 .netcore 开发环境
使用VSCode开发.netcore程序原创 2024-01-08 23:03:47 · 3673 阅读 · 0 评论 -
VSCode使用MinGW中的go并支持CGO
Go默认是使用GCC/G++来编译C/C++程序的,Windows中直接安装的版本由于找不到GCC/G++,是不会启用CGO的。如何在Windows中使Go支持CGO?原创 2023-11-15 18:08:13 · 1344 阅读 · 0 评论 -
类成员函数大小问题
上周,我一同事,在调试我们项目的时候,发现我写的一段代码中,有一个类成员函数指针数组有大小有点怪异,便叫我过去瞧瞧。有如下一段定义:interface IPLUnknown{ virtual ~IPLUnknown() {}};interface IPLRunnable : public IPLUnknown{ virtual BOOL Init(v原创 2009-11-15 20:56:00 · 1205 阅读 · 1 评论 -
使用Go语言生成Excel任务表依赖图(Markdown文件mermaid图)
将Excel任务表中的关系转换成Markdown的mermaid图,方便使用Markdown工具直观地查看任务依赖原创 2023-08-04 10:22:20 · 1282 阅读 · 0 评论 -
使用Glib中测试框架对C代码进行单元测试
在Windows上做开发可能很少甚至没有听过GLib库,但是在Linux下,它却是一个非常重要的库,Linux下的著名桌面GUI GNOME的基石就是它,GNOME是使用GTK开发的,而GTK的底层库就是GLib。,按官网的介绍:GLib是一个通用的,跨平台的实用库,它提供了许多有用的数据结构,宏,类型转换,字符串实用库,文件实用库,一个抽象的主循环等等。它是使用的LGPL许可发布的,可以在Unix、Linux、Windows、MacOS平台上运行。原创 2023-04-21 18:26:27 · 719 阅读 · 0 评论 -
Go项目中添加生成时间与版本信息
我们在编写软件时,一般会有版本号以及生成的时间,Go编译的程序中,如何添加当时的编译时间以及版本信息?C/C++语言,非常方便,可以直接使用__DATE__宏即可知道生成时间,但是Go语言没有。既然Go语言没有, C语言有,那我们可以直接使用CGO来使用C语言的功能。当然也可以使用Go的编译链接参数来指定,只是这种方式不适用于Windows。原创 2023-03-30 18:22:09 · 791 阅读 · 0 评论 -
让docsify-katex支持化学公式mhchem扩展
在使用docsify构建Markdown文档时,如果想要支持数学公式,可以使用docsify-katex插件,但是该插件不支持化学公式mhchem扩展,比如下面的代码:\ce{Zn^2+ <=>[+ 2OH-][+ 2H+] $\underset{\text{amphoteres Hydroxid}}{\ce{Zn(OH)2 v}}$ <=>[+ 2OH-][+ 2H+] $\underset{\text{Hydroxozikat}}{\ce{[Zn(OH)4]^2-}}$原创 2022-03-16 16:31:39 · 1506 阅读 · 0 评论 -
如何利用VC编写有汇编代码的跨平台代码
在C/C++中添加内联汇编很容易,只需要用__asm(VC中)或者__asm__(gcc/g++中)关键字就可以在C/C++中添加内联汇编了。但是VC中的内联汇编与gcc/g++中的内联汇编在格式不大相径庭,VC中使用的是Intel的语法格式,而gcc/g++使用的是AT&T语法格式。所以我们在编写跨平台的C/C++代码的时候,若有需要用到汇编代码的时候,就显得有点为难了!虽然我们可以编写两个版本原创 2007-05-12 13:39:00 · 2435 阅读 · 0 评论 -
将NASM汇编器集成到Visual Studio中
之前在《Visual Studio中使用NASM编译汇编文件》中介绍了如何将NASM汇编器集成到VS2005和VS2008中,但VS2010与VS2012的“生成自定义”与VS2005和VS2008的配置文件不一样了,需要重新进行配置。笔者在《Integrating a compiler/assembler in VS ; Using NASM with Visual Studio 2010》原创 2013-06-01 21:17:25 · 4996 阅读 · 1 评论 -
使用Python爬取考勤信息
最近公司的加班调休审批制度有一些调整,由于公司网站上没有清楚的标明各自有多少天可以调休,所以为了清楚的知道自己还有多少天可以调休,就想着使用爬虫爬一下考勤信息,把它放在一个Excel表中以方便查阅。最近项目不是很忙,也趁机学习学习Python爬虫。一、环境准备1.首先需要先安装Python,笔者使用的Python3.X。2.然后使用pip安装工具安装爬虫所需要的非标准库主要使用到以下一些非...原创 2018-12-29 11:50:40 · 2312 阅读 · 0 评论 -
使用Python实现XML文件转为Excel文件
由于项目组中原来的文件使用的XML格式作为配置,扩展性很好,但是编辑与阅读不是很直观,特别一些规则的二维表,所以为了方便阅读与编辑,花了一些时间写了一个Python脚本,以实现将XML文件转为Excel文件。这里支持XML文件转为一个Sheet或者多个Sheet:如果第二层所有标签都相同则会转为一个Sheet,所有第二层的标签都会作为行数据如果第二层的标签有多种,则会把第二层的不同标签作为...原创 2019-09-02 16:21:38 · 11232 阅读 · 9 评论 -
CentOS python2升级到python3后的注意事项
由于CentOS系统默认使用的是Python2,升级到Python3后原来的一些系统软件就不可用了,需要做一些处理。首先,一定要保留原来的Python2,不能覆盖掉了,否则系统所需Python2的软件都将无法正常使用。可以将Python3安装到/usr/local/python3下面,然后使用下面的命令做一个处理:cd /usr/binmv python python2ln -s /usr...原创 2019-05-26 18:27:39 · 1301 阅读 · 0 评论 -
使用自己的Python函数处理Protobuf中的字符串编码
使用Python如何处理Protobuf中的非UTF8字符串,笔者以实际的项目经历与大家分享!原创 2016-11-04 19:03:00 · 11599 阅读 · 0 评论 -
如何用C API遍历Lua脚本中的表
在刚接触Lua不久,了解了许多理论知识后,就有一种跃跃欲试的冲动,想要自己动手写一段代码来试试。这也许是作为一个程序员所共有的想法吧!了解了一些Lua的C API后,在看到脚本里面用一个for循环遍历一张表时,就想利用这些API自己在C代码中实现这个遍历!可是找了很久,也试了很久,都没有找到一个可以实现遍历表的解决方案!在浩瀚的网络中,我苦苦查找了很久,最后终于找到了这个操作,以下是统计一张表中的原创 2007-05-22 22:10:00 · 1702 阅读 · 0 评论 -
宿主程序Crash与Lua是动态库还是静态库有关?
前一阵子在做项目的时候,遇到一个感觉比较怪异的问题:在项目中我们用了Lua作为脚本扩展支持,Lua是以静态库的形式编译进项目程序中的,但应用程序运行不了多久,就会宕在Lua函数luaM_realloc_中。在我仔细查看了调用Lua脚本的地方,并没有发现任何的可疑之处,而且以前将Lua模块与应用程序模块直接放在同一个项目中的时候并没有出现过类似情况。故认为是项目中的其它代码写得有问题导致内存分配失原创 2009-04-30 17:48:00 · 1065 阅读 · 0 评论 -
解密Cocos2D中的Lua源码
由于没学习和使用过Cocos2D,但出于工作需要,后面将要学习与使用Cocos2D。 第一次使用修改过的Cocos的时候遇到一些Lua文件是加过密的,不能看到源码,但是又可以正常的被Cocos读取执行,通过对Lua的调试可以看到读取到内存中的源码,由于调试工具的限制,无法直接将这些源码保存到磁盘,当然有一个笨办法,就是将能看到源码的文件一个一个地保存到磁盘,在没有更好的办法之前,也只能这样了。这...原创 2018-05-26 11:17:39 · 2702 阅读 · 0 评论 -
VSLua工具
今天在网上找到一些比较好的Lua工具,其中最让人心动的是VSLua,它可以在VS下与C/C++代码一起调试。感觉是一个很爽的工具。但是也让人难以接受的就是它目前只支持英文版的VS,而不支持中文版的VS。太让人郁闷了!原创 2007-05-15 20:12:00 · 3587 阅读 · 2 评论 -
使用IntelliJ IDEA配置Erlang开发环境
使用IntelliJ IDEA配置Erlang开发环境原创 2016-01-20 21:30:47 · 10489 阅读 · 14 评论 -
VSCode配置Erlang开发环境
一、下载安装Erlang这里以最新的OTP 23.0 Windows 64-bit Binary File为例,下载后安装到C:\Program Files\erl-23.0,在PATH中添加路径:C:\Program Files\erl-23.0\bin二、安装VSCode Erlang插件三、安装rebar3在https://www.rebar3.org/下载最新的rebar3,放在Erlang的可执行文件目录中(C:\Program Files\erl-23.0\bin),然后在此目录添加一原创 2020-08-13 16:43:35 · 5241 阅读 · 6 评论 -
erlang 开发建议
* 确保没有任何编译警告* Erlang中String采用list实现,32位系统中,其1个字符用8个字节的空间(4个保存value, 4个保存指针)。因此string速度较慢,空间占用较大* 在Server中,总是尽力书写尾递归(tail-recursive)的函数* 使用'++'时,left list会被拷贝,然后添加到right list的头部,因此最好把length转载 2013-12-05 12:27:19 · 1004 阅读 · 0 评论 -
使用Makefile编译Erlang
#配置选项,可以是DEBUG和RELEASECONFIG ?= RELEASE#语言配置,可以是chs(简体中文)、cht(繁体中文)等等Region ?= chs#源文件目录SOURCE_DIR = ./src#文件包含目录INCLUDE_DIR = -I ./includeINCLUDE_DIR += -I ./src/config#需要额外原创 2016-01-26 20:03:42 · 1547 阅读 · 0 评论 -
如何将ProtoBuffer生成Erlang文件
ProtoBuffer官方提供了C++、Java、Python等语言的生成器,但不支持Erlang语言,使用Erlang语言的项目如果想要使用ProtoBuffer,该如何将PB生成Erlang文件?如果ProtoBuffer文件之间有相互的依赖,又该如何处理?本文将为您一一解答。原创 2017-11-27 19:00:36 · 1420 阅读 · 0 评论 -
VSCode下安装配置Go环境
由于国内墙的原因,安装配置Go环境一般情况下是不能直接成功的,需要翻墙或者使用代理。一、下载并安装Go安装包如果可以上官网,可以直接从官网下载。如果上不了官网,可以从下面的地址下载:https://studygolang.com/dl以Windows为例,下载go1.14.4.windows-amd64.msi并安装。二、VSCode安装Go相关插件安装Go插件安装其它插件在VSCode中Ctrl+Shift+P,打开命令面板,输入:go:install在弹出的提示中选择Go:原创 2020-07-07 11:10:28 · 1041 阅读 · 0 评论 -
go读写网络消息
前几天项目需要写一个登录压力测试机器人对服务器进行压力测试。服务器是使用C++写的,为了快捷完成机器人,我并没有选择C++来写,一方面使用C++来写代码量比较大,另外一方面使用C++来模拟几百上千个机器人写起来没Erlang,Go,C#等这些自带协程(Erlang称为进程,与操作系统进程概念不一样)的语言写起来方便快捷。我主要考虑使用Erlang或者Go来写。前几年我使用Erlang语言做过一款MMORPG游戏的服务器,使用过2年多时间。使用Erlang写机器人这种程序非常适合,虽然有几年没使用了,但捡原创 2021-03-10 17:43:08 · 299 阅读 · 0 评论 -
Go语言非main包编译为静态库并使用
Go语言项目中基本上都是以源码的形式提供包,对公司或者企业而言,如果想要隐藏关键代码怎么办?我们可以将Go的非main包编译为静态库提供给用户使用。下面以Windows为例,介绍一下如何将Go的非main包编译为静态库,用户又将如何使用。一、环境笔者使用的VSCode,在终端中查看Go的环境变量,主要看GOROOT以及GOPATH,笔者的GOROOT在C:\Program Files\Go。二、常规工程在任意地方新建一个目录,假设为test,然后使用VSCode打开。我们创建如下3个工程文件:原创 2021-07-09 18:55:29 · 2356 阅读 · 5 评论 -
在Visual Studio调试器中显示Google Protocol Buffers容器类型的值
Google Protocol Buffers会生成RepeatedField和Map等容器类型,为方便在Visual Studio中进行调试,编写了如下natvis文件,可以保存为pb.natvis,然后放在Visual Studio安装目录下的Common7\Packages\Debugger\Visualizers目录中,如:C:\Program Files (x86)\Microsoft...原创 2019-06-24 17:07:49 · 583 阅读 · 0 评论 -
C++模板类成员函数使用SFINAE特性匹配智能指针
最近在项目中需要一个根据权重来计算随机的功能,为了能共用,写了一个模板类,代码如下:template<typename T>class RandomByWeight{public: RandomByWeight() : m_sum(0) { } void push_back(const T& v) { m_sum += v.GetWeight(); m_vctSum.push_back(m_sum); m_vctData.push_back(v); }原创 2021-02-23 15:01:21 · 519 阅读 · 0 评论 -
导出C++中的类到Lua脚本中的经历
这两天一直在研究Lua和LuaPlus。由于项目需要将C++中的类导出到Lua脚本中,让Lua脚本也可以使用C++中的东西。倘若用Lua的C API直接导出到Lua脚本中,感觉不是很方便,所以选择了最新的LuaPlus5.1版,又在网上找了沐枫写的一个LuaPlusHelper.h文件,便开始试着导出C++中的类到Lua脚本中去。我测试用的被导出的类是一个我自己写的,内容相当简单:class原创 2007-05-18 09:29:00 · 3199 阅读 · 3 评论 -
关于C/C++的位域
在C/C++中我们有时为了节省内存占用空间,需要使用到位域,如下所示代码:struct SDummy{ int A : 2; int B : 8; int C : 12; int D : 10;}; 在计算机内存昂贵的情况下,位域不乏为一种有效的节省内存占用空间又让代码书写比较通俗易懂的方法。但是在现今内存相对便宜的时代,应原创 2010-01-31 23:44:00 · 796 阅读 · 0 评论 -
C++类模板的成员函数模板写法
这几天本来想将Lua_Tinker移植到Linux上去的,但是由于VC中的模板写法与gcc中的模板写法有些不同之处,比如下面一段代码: struct pop_{ template static T invoke(lua_State *L, int index) { return lua2type::invoke(L, index); } template<>原创 2007-05-21 13:04:00 · 5616 阅读 · 0 评论 -
使用C++11模板SFINAE实现enum class与整数的比较
在C++11中添加了enum class类型,与enum类型不同的是,使用enum class中的枚举值时必须加上类型限定符,而原来的enum枚举是可以不用加类型限定符的,它们都会被当作全局(如果没有在命名空间内)整数来对待。这样就会导致不同的模块,不能定义相同的枚举值。比如:头文件a.h中定义了一个枚举:enum ETest1{ A, B,};头文件b.h需要包含a.h,如果此时在b.h中定义:enum ETest2{ A, B,};则会导致编译不过,提示A与B重定义。原创 2020-12-08 15:18:53 · 1484 阅读 · 0 评论 -
C++ 11 std::bind函数绑定如何省略占位参数std::placeholders::_1……
我们在使用C++的函数绑定功能时,每次都需要写一大堆的占位符,有多少个参数就要写多少个占位符,比如下面的示例代码:class CTest{public: void foo1(int a, string& b, float c, double d, void* p); void foo2(int a, string& b, float c, double d, void* ...原创 2019-08-02 18:32:05 · 3474 阅读 · 0 评论 -
C++实现Go的defer功能
在Go语言中有一个关键字:defer,它的作用就是延迟执行后面的函数,在资源释放方面特别有用,比如下面一段C/C++的示例代码:void test(){ FILE* fp = fopen("test.txt", "r"); if (nullptr == fp) return; if (...) { fclose(fp); return; } if (...) { fclose(fp); return; } if (...) { fclose(fp); r原创 2021-07-08 18:38:14 · 554 阅读 · 2 评论