女人不仅需要维护,更需要代码。面向对象编程就是把面向代码当作一个对象,定期维护。

目录

一、美丽时尚来源洞察

二、祛痘cppCheck

三、再生git

字体工欲善其事,必先利其器。

一、美丽时尚来源洞察

1.1真假小龙女的问题

都说好吃,同样的角色都是小龙女,但是效果不一样。达到同样的功能,有的代码一目了然,像诗一样赏心悦目;有些就像SHI,比如下面的代码,虽然功能正常,但是长什么样呢?

//C语言混沌大赛作品# includeMain (intt,int _,char * a) {return!0

就像女人爱美一样,出门拍照一定要化妆。代码也是需要美妆的,除非你预料到后面继任者心里会有十万个诅咒。这TM是谁写的?尤其是嵌入式系统产品,升级维护周期长,软件的可读性更重要;代码规范对后续的维护和升级大有裨益。

1.2代码格式

一般公司不缺编码规范,缺的是实现。小项目单人完成,编码风格随意;大型项目团队有不同的编码风格。目前个人只发现go语言在编译时强制格式化,其他语言编译时不检查排版格式。对于编码标准,不能依赖个人主观,可以通过强制工具自动实现来提高执行力。

无论编码是使用Keil/MDK、Qt等集成工具,还是纯代码编辑工具Source Insight,一般都支持自定义运行可执行文件,比如Astyle。可以自定义新菜单,一键执行Astyle,一键格式化代码,排版系统一、分明。

a style http://astyle.sourceforge.net/,官网按需下载安装,只需要AStyle.exe。关于它的用途和参数,可以进入文档。对于代码的基本样式,如何对齐{},是否换行,如何排版switch-case,tab键的宽度,运算符或变量前后的空格等等,基本上代码排版涉及的各个方面都有参数。个人选择的编码参数有

-style=allman-S-U-t-n-K-p-S4-j-q-Y-xW-xVfileName

效果如下

int foo(boolisBar){ if(isBar){ bar();return1} else { return0}}

建议参考文档逐个熟悉函数,确认参数,然后集成到编辑工具中,以Source Insight为例。

1、打开选项或工具下的“自定义命令”(不同版本的Source Insight不同),添加命令并运行。2、选择正确的路径,组合前面的参数类型,最后加上%f表示文件的执行。

c:a style . exe-style=allman-S-U-t-n-K-p-S4-j-q-Y-xW-xV % f

3、将此命令插入“编辑”菜单,然后单击编辑栏中的“样式”以自动对当前文件进行格式和排版。

1.3高级配置

前面只是Source Insight的基础扩展,下面简单介绍一下高级扩展宏功能。本文仅描述基本流程。1、配置菜单2、插入后,主菜单栏中将出现“工作”菜单。点击Insertifdef,弹出如下对话框3、确认后自动在光标处插入代码。

#ifdefined(ABCD)#endif

4、不仅支持插入(如果定义的话),还包括插入文件头、为H文件插入宏以避免多重包含、为函数插入注释、自动添加编辑时间和作者姓名。这些宏配置和以前一样,自定义,比如函数注释的内容和格式也可以自由定义。5、配置路径如下:首先关闭所有Source Insight项目,然后打开Base。例如,宏Insertifdef是下面的代码。

macroninsertifdef(){ SZ=Ask(' Enterifdefcondition:')if(SZ!=' ')IfdefSz(SZ);}//Wrapifdef.endifaroundthecurrentselectionmacroIfdefSz(SZ){ hwnd=getcurrent wnd()lnFirst=GetWndSelLnFirst(hwnd)ln last=getwndsellnllast(hwnd)hbuf=GetCurrentBuf()ins buf line(hbuf,ln first,' # if defined(@ SZ @)')ins buf line(hbuf,lnLast 2,' #endif')}

如果Ask是弹出提示,sz得到输入,然后InsBufLine插入两行代码。这些接口的使用说明可以通过打开Source Insight的帮助来查看。提问描述:比如插入函数注释的代码如下:

SzInf=Ask('为什么写这个函数:')szDescription=Ask('请输入函数的注意事项和算法实现:')//begin assembling Titlestringsz='/* * * * * * * * * * * * * * * * * * * * * * * * * * *。* * * * * * * * * * * * * * * * * * * * * * * * *"InsBufLine(hbuf,ln,sz)InsBufLine(hbuf,ln 1,' * Function-@ SZ func @ ')InsBufLine(hbuf,ln 2,' * '目的-@szInf@')InsBufLine(hbuf,ln 4,' *'InsBufLine(hbuf,ln 5,' * Description-@ SZ Description @ ')InsBufLine(hbuf,ln 6,' *')InsBufLine(hbuf,ln

最后,自动插入的函数注释会显示以下效果:

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *修改历史* - *v1.0,22-11-2020,嵌入式-系统编写[时间格式可自由设置]*-* * * * * * * * *

6、其他宏也是如此,可以自由配置。当然,开启这个功能的第一步是编辑并将所有的szMyName替换成自己的名字。需要注意的一点是,插入函数注释时,光标必须在函数的第一个{内,否则无法获取函数名,并会提示错误。

1.4摘要

Source Insight集成Astyle自动排版,统一风格;集成宏定义,统一标注格式,提高效率。

二、祛痘cppCheck

2.1祛痘隐患

靠美可以掩盖面部缺陷,比如痘痘,但为了极致,还是要从根源上去痘痘,不化妆总是合适的。代码整洁,没有任何隐患。大多数开发者对警告视而不见,认为隐患问题不大。如果同一个美女长了一脸痘痘,她的颜值会瞬间下降。代码也是如此。编译警告就像青春痘一样,看似不着边际。其实对代码的质量和后期维护都是隐患。要培养习惯,所有的警告都要消除。

另外,对于编码规范,不仅有排版布局,还有命名规范。例如,如果宏定义使用小写字母,必须指出需要修改。所以代码必须经过青春痘,去除小隐患,严格要求,才能打造出完美的代码。而依靠人工检查效率低下,静态扫描检查命名规范的神器应运而生。

代码的静态检测工具有很多。为什么推荐cppCheck?因为是Qt实现,而且开源。作为嵌入式软件开发,Qt可以锦上添花,它可以运行在多个平台上。用它来开发小工具,模拟验证一些代码,比在真机中编译、下载、调试更快更方便。

CppCheck,http://cppcheck.net/,官网,可以下载执行文件和源代码。有一点Qt基础的,可以下载源代码。Qt项目如下,可以根据自己的需求和能力进行二次开发。自动代码格式化和静态分析可以有效规避软件风险。基于开源的Cppcheck,集成Astyle,结合实际的开发平台和编码标准,集成Qt的codeCheck诞生了。

在codeCheck执行过程中,首先将C语言代码按照指定的规则自动格式化、排版、对齐,调整代码间的空格和间距,强制换行特殊语句或添加括号,通过简单的操作(即上一章的配置参数)就可以统一代码格式。然后拆分代码字符,建立令牌数据库,根据预设规则分析是否有匹配的非法代码,直观显示风险代码的位置,进行跟踪修复。CodeCheck没有编译语法分析,因此在正常编译之前分析导入的文件是有意义的。

针对实际开发中出现的问题,如变量命名冲突,或关键变量缺乏注释导致维护升级困难等,特别增加了个性化扫描标准。由于个人时间和水平有限,需要对工具进行优化和改进,但基本可以满足常规应用和新型人才培养的需要。

即使没有Qt基础,直接用开源版本也是相当强大的,二次开发只是锦上添花而已。

2.2静态代码分析和静态分析

个人二次开发后的主界面如下,和原来的cppcheck差不多,只是增加了命名规范检查(全局变量必须以g_开头,带注释;宏定义、枚举值禁止包含小写字母等。).“分析”导入文件或文件夹后,可以启动自动格式化,分析代码逻辑,显示结果如下:选择“分析结果”栏,显示扫描的风险代码,注明风险类型和代码位置,如下图所示。

2.3源代码分析

非cppcheck源代码,二次开发的代码片段。

VoidCheckThread:run()//运行扫描,下面是条目{qstringfile=mresult。get next file();而(!file . isempty()mState==Running){ qDebug()' formatfile ' file;file_format(文件);//添加Astyle命令mcppcheck . check(file . tostdstring());}* */}//a style . exe v 3.1添加代码以格式化void check thread:file _ format(constqstringfile){ qprocessbuilder;QStringListparam' param '-style=allman ' '-S ' '-U ' '-t ' '-n ' '-K ' '-p ' '-S4 ' '-j ' '-q ' '-Y ' '-xW ' '-xV '

三、再生git

3.1月光宝盒

爱情不可期,往事成回忆。至尊宝可以用月光宝盒穿越时空去寻找爱情。对于一个女人来说,如果她有一盒月光,即使她看起来很老,她也可以回到过去,焕发青春,永远年轻。

对于程序员来说,一个完美的代码,修修补补,几经周折终于封板;因为保存不好或者修改记录丢失,那种痛苦是常人无法想象的。为了不后悔失去的痛苦,必须用版本控制来追溯代码的过去,程序员的月光宝盒就是Git神器。

3.2版本控制git

你多聪明就不用说了,每天抄一份代码,描述一下;不要说svn等工具有多先进;这些工具在Git的分布式软件版本控制面前不值一提。git虽有不足之处,但仍难掩光芒。

在过去的十年里,我们一直在开发嵌入式软件,80%的时间都在使用windows版本的git进行可视化操作。与命令行相比,更容易掌握和使用,查看版本记录更直观。本文不考虑命令行的操作模式。git https://git-scm.com/,官方网站。

1、安装Tortoisegit-2.5.0.0-64bit.msi这只是安装的git的内核函数。要在windows下操作,需要安装接口外壳。

2、安装Git扩展-2.50.02-SetupComplete.msi或Git-2.15.0-64-bit.exe,这是两种风格的接口,主要功能相似。我个人选择后者。您也可以两者都安装。

3、在安装过程中有许多配置。所有选项都是用windows关键字选择的,否则使用时没有问题,但是保存的记录不正常。

既然是界面操作,就打开鼠标右键的快捷图标。后续安装选项,都带windows关键字。4、安装完成后,点击鼠标右键,Git GUI Here出现。5、如果是新手,可以安装中文补丁乌龟git-语言包-2.5.0.0-64 bit-zh _ cn.msi,建议不要安装,翻译有点搞笑。

3.3基本演示

1、配置2、创建本地版本库,git在此创建存储库。默认可以创建一个版本,在test的空文件夹下会生成一个. git。

3、在测试下进行任何更改,如添加123.txt,并提交更改。此时点击右键4、。保存这个修改后,使用git GUI这里-repository-visualize master的历史查看所有版本记录。5、一般配置和常用功能

3.4总结

Git的使用,尤其是多人合作,应该注意以下几点:

1、推送服务器前同步;

2、2分支版本有冲突,rebase先解决;不要使用merge在你熟练操作之前;

:版本3、节点不能使用中文,但描述可以修改;

4、不要提交自动生成的文件。可以用Tortoise git-delete和add in ignore list过滤指定文件,即使有改动也不要提交。

5、Git具有较差的比较工具,因此可以将其配置为使用外部比较工具。一共三个地方,比较查看器和合并工具都改成了HA-BCompare。这个工具功能强大,显示界面清晰。

字体工欲善其事,必先利其器。

工欲善其事,必先利其器,熟练掌握,合理使用。代码标准化,静态扫描消除风险,完整的修改记录可以保证代码的质量。

原标题:代码维护

文章来源:【微信微信官方账号strongerHuang】欢迎添加关注!请注明文章出处。

审计彭静