编程语言
文章平均质量分 63
编程语言
witton
这个作者很懒,什么都没留下…
展开
-
go语言魔法技能go:linkname
go语言魔法技能go:linkname链接使用外部未导出函数原创 2024-02-29 22:59:45 · 613 阅读 · 0 评论 -
C++ 20 Module
C++ 20 Module介绍原创 2024-01-23 00:08:13 · 1193 阅读 · 0 评论 -
使用斐波那契(Fibonacci)数列来测试各大语言的性能
笔者使用最多的语言是C++,目前项目中在使用Go,也使用过不少其它语言,像Erlang,Python,Lua,C#等等。最近看到C#夺冠,首次荣获 TIOBE 年度编程语言,同时也看到网上有不少Java与C#之争的文章,于是就想要来做一个性能比较。这里参与性能比较的是以下几门语言:Go、C#、Java、Python、Erlang。这些语言或语言标准库本身都提供了大数计算的支持,不需要自己实现大数计算或者找额外的库来实现大数计算。原创 2024-01-12 23:59:10 · 1152 阅读 · 4 评论 -
VSCode 搭建Java开发环境
VSCode搭建Java开发环境原创 2024-01-12 22:27:33 · 599 阅读 · 0 评论 -
VSCode搭建 .netcore 开发环境
使用VSCode开发.netcore程序原创 2024-01-08 23:03:47 · 1641 阅读 · 0 评论 -
VSCode使用MinGW中的go并支持CGO
Go默认是使用GCC/G++来编译C/C++程序的,Windows中直接安装的版本由于找不到GCC/G++,是不会启用CGO的。如何在Windows中使Go支持CGO?原创 2023-11-15 18:08:13 · 730 阅读 · 0 评论 -
类成员函数大小问题
上周,我一同事,在调试我们项目的时候,发现我写的一段代码中,有一个类成员函数指针数组有大小有点怪异,便叫我过去瞧瞧。有如下一段定义:interface IPLUnknown{ virtual ~IPLUnknown() {}};interface IPLRunnable : public IPLUnknown{ virtual BOOL Init(v原创 2009-11-15 20:56:00 · 1154 阅读 · 1 评论 -
使用Go语言生成Excel任务表依赖图(Markdown文件mermaid图)
将Excel任务表中的关系转换成Markdown的mermaid图,方便使用Markdown工具直观地查看任务依赖原创 2023-08-04 10:22:20 · 1085 阅读 · 0 评论 -
CMake自动按目录结构编译Protobuf代码
CMake自动按目录结构编译protobuf代码原创 2023-04-26 17:49:55 · 1756 阅读 · 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 · 582 阅读 · 0 评论 -
Go项目中添加生成时间与版本信息
我们在编写软件时,一般会有版本号以及生成的时间,Go编译的程序中,如何添加当时的编译时间以及版本信息?C/C++语言,非常方便,可以直接使用__DATE__宏即可知道生成时间,但是Go语言没有。既然Go语言没有, C语言有,那我们可以直接使用CGO来使用C语言的功能。当然也可以使用Go的编译链接参数来指定,只是这种方式不适用于Windows。原创 2023-03-30 18:22:09 · 615 阅读 · 0 评论 -
Linux下使用CMake构建含nasm汇编的C/C++项目
CMake的出现极大的方便了C/C++项目的编译管理,避免了手工写Makefile的繁琐。如果在C/C++项目中有需要使用到外联汇编语言,CMake也一样可以进行编译管理。在Linux下常用的C/C++编译器为GCC。近些年,随着LLVM项目的发展,Clang也占有了一席之地。但它们在Linux平台下,背后默认的汇编器依然是GAS。GAS使用语法格式为AT&T,与我们平常学习的Intel格式截然不同。它们的差别这里就不赘述了,网络上很多这方面的资料。那我们能不能在Linux平台也使用我们熟悉的In原创 2022-05-29 00:24:09 · 3076 阅读 · 1 评论 -
让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 · 1284 阅读 · 0 评论 -
跨平台宏的写法
(若转载,请注明原出处与作者,作者:Witton) 前段时间在写代码的时候,有一段代码发现用宏比较方便,于是就用宏完成了这段代码,写完之后,看到这段代码是相当的整齐,有一种赏心悦目的感觉。现将之贴出来与大家分享: #define FUNCTION(T,N)\ int GetBase##N##Array()\ {\ return (int)&gCharBaseDat原创 2007-04-30 17:50:00 · 1868 阅读 · 0 评论 -
跨平台函数指针的写法
(若转载,请注明原出处与作者,作者:Witton)前段时间,我在项目中用到了函数指针, 其写法示例如下://Myclass.hclass CMyClass;typedef void (CMyClass:: *MyCALLBACK)();class CMyClass{ MyCALLBACK m_MyHandler[5];protected: v原创 2007-05-11 13:05:00 · 1100 阅读 · 0 评论 -
跨平台UNICODE编程总结
这段时间在架构整个服务器,虽然前段时间受到了5.12汶川8.0级大地震的影响(深切悼念在此次大地震中遇难的同胞们),但是,我的工作还是在不断地向前推进着。为了让我们的服务器能够跨平台(主要是WINDOWS与LINUX),且能支持世界上的各种语言,我写了一个跨平台的且支持UNICODE的库。其实,我在之前也有写过跨平台方面的代码,积累了不少的经验,但在写这个库的过程,还是遇到过许多问题,我觉得其原创 2008-06-16 13:25:00 · 1634 阅读 · 4 评论 -
跨平台模板的写法
(若转载,请注明原出处与作者,作者:Witton) 由于工作的原因,自己写的代码,需要跨平台运行(windows与Linux),但是由于VC编译器与gcc/g++编译器的差别,有的代码,在VC下面编译OK,在Linux下却未必编译得过,下面就是一个典型的例子:请先看一下下面的一段代码是否有问题:#include using namespace std;template原创 2007-04-30 17:10:00 · 1271 阅读 · 0 评论 -
跨平台Unicode编程的一点问题
最近在做一个跨平台的库,想让这个库支持ANSI和UNICODE,但是在LINUX下不像WINDOWS下有那么多UNICODE的函数可供使用,比如fopen在LINUX下并没有像WINDOWS中一样有一个_wfopen,这就需要作另外的处理,这个不是今天想说的问题。 我今天想说的问题是在LINUX下与WINDOWS下都有一个支持UNICODE的函数:wprintf。这个原创 2008-04-24 17:12:00 · 1021 阅读 · 0 评论 -
关于友元函数的跨平台问题
今天我在项目中写了一段代码,这段代码中有两个类A和B,类A中的一个保护成员函数需要访问类B中的私有成员变量,为了简便起见,我将类A中的这个保护成员函数设置成类B的友元函数,在VC下编译通过,没有任何问题。但是在LINUX下编译却出现了错误,说该函数是保护的。在LINUX下我的GCC/G++版本是4.4.1,根据错误提示,我将类A中的那个保护成员函数改为public就OK了。我记得在GC原创 2010-02-03 13:51:00 · 606 阅读 · 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 · 2379 阅读 · 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 · 4781 阅读 · 1 评论 -
使用Python爬取考勤信息
最近公司的加班调休审批制度有一些调整,由于公司网站上没有清楚的标明各自有多少天可以调休,所以为了清楚的知道自己还有多少天可以调休,就想着使用爬虫爬一下考勤信息,把它放在一个Excel表中以方便查阅。最近项目不是很忙,也趁机学习学习Python爬虫。一、环境准备1.首先需要先安装Python,笔者使用的Python3.X。2.然后使用pip安装工具安装爬虫所需要的非标准库主要使用到以下一些非...原创 2018-12-29 11:50:40 · 2090 阅读 · 0 评论 -
使用Python实现XML文件转为Excel文件
由于项目组中原来的文件使用的XML格式作为配置,扩展性很好,但是编辑与阅读不是很直观,特别一些规则的二维表,所以为了方便阅读与编辑,花了一些时间写了一个Python脚本,以实现将XML文件转为Excel文件。这里支持XML文件转为一个Sheet或者多个Sheet:如果第二层所有标签都相同则会转为一个Sheet,所有第二层的标签都会作为行数据如果第二层的标签有多种,则会把第二层的不同标签作为...原创 2019-09-02 16:21:38 · 10761 阅读 · 6 评论 -
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 · 1224 阅读 · 0 评论 -
使用自己的Python函数处理Protobuf中的字符串编码
使用Python如何处理Protobuf中的非UTF8字符串,笔者以实际的项目经历与大家分享!原创 2016-11-04 19:03:00 · 11419 阅读 · 0 评论 -
如何用C API遍历Lua脚本中的表
在刚接触Lua不久,了解了许多理论知识后,就有一种跃跃欲试的冲动,想要自己动手写一段代码来试试。这也许是作为一个程序员所共有的想法吧!了解了一些Lua的C API后,在看到脚本里面用一个for循环遍历一张表时,就想利用这些API自己在C代码中实现这个遍历!可是找了很久,也试了很久,都没有找到一个可以实现遍历表的解决方案!在浩瀚的网络中,我苦苦查找了很久,最后终于找到了这个操作,以下是统计一张表中的原创 2007-05-22 22:10:00 · 1661 阅读 · 0 评论 -
宿主程序Crash与Lua是动态库还是静态库有关?
前一阵子在做项目的时候,遇到一个感觉比较怪异的问题:在项目中我们用了Lua作为脚本扩展支持,Lua是以静态库的形式编译进项目程序中的,但应用程序运行不了多久,就会宕在Lua函数luaM_realloc_中。在我仔细查看了调用Lua脚本的地方,并没有发现任何的可疑之处,而且以前将Lua模块与应用程序模块直接放在同一个项目中的时候并没有出现过类似情况。故认为是项目中的其它代码写得有问题导致内存分配失原创 2009-04-30 17:48:00 · 1037 阅读 · 0 评论 -
解密Cocos2D中的Lua源码
由于没学习和使用过Cocos2D,但出于工作需要,后面将要学习与使用Cocos2D。 第一次使用修改过的Cocos的时候遇到一些Lua文件是加过密的,不能看到源码,但是又可以正常的被Cocos读取执行,通过对Lua的调试可以看到读取到内存中的源码,由于调试工具的限制,无法直接将这些源码保存到磁盘,当然有一个笨办法,就是将能看到源码的文件一个一个地保存到磁盘,在没有更好的办法之前,也只能这样了。这...原创 2018-05-26 11:17:39 · 2507 阅读 · 0 评论 -
VSLua工具
今天在网上找到一些比较好的Lua工具,其中最让人心动的是VSLua,它可以在VS下与C/C++代码一起调试。感觉是一个很爽的工具。但是也让人难以接受的就是它目前只支持英文版的VS,而不支持中文版的VS。太让人郁闷了!原创 2007-05-15 20:12:00 · 3508 阅读 · 2 评论 -
使用IntelliJ IDEA配置Erlang开发环境
使用IntelliJ IDEA配置Erlang开发环境原创 2016-01-20 21:30:47 · 10257 阅读 · 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 · 4537 阅读 · 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 · 978 阅读 · 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 · 1472 阅读 · 0 评论 -
如何将ProtoBuffer生成Erlang文件
ProtoBuffer官方提供了C++、Java、Python等语言的生成器,但不支持Erlang语言,使用Erlang语言的项目如果想要使用ProtoBuffer,该如何将PB生成Erlang文件?如果ProtoBuffer文件之间有相互的依赖,又该如何处理?本文将为您一一解答。原创 2017-11-27 19:00:36 · 1333 阅读 · 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 · 926 阅读 · 0 评论 -
go读写网络消息
前几天项目需要写一个登录压力测试机器人对服务器进行压力测试。服务器是使用C++写的,为了快捷完成机器人,我并没有选择C++来写,一方面使用C++来写代码量比较大,另外一方面使用C++来模拟几百上千个机器人写起来没Erlang,Go,C#等这些自带协程(Erlang称为进程,与操作系统进程概念不一样)的语言写起来方便快捷。我主要考虑使用Erlang或者Go来写。前几年我使用Erlang语言做过一款MMORPG游戏的服务器,使用过2年多时间。使用Erlang写机器人这种程序非常适合,虽然有几年没使用了,但捡原创 2021-03-10 17:43:08 · 215 阅读 · 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 · 1891 阅读 · 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 · 532 阅读 · 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 · 461 阅读 · 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 · 3088 阅读 · 3 评论