人工智能

聊聊代码的保养

时间:2010-12-5 17:23:32  作者:系统运维   来源:域名  查看:  评论:0
内容摘要:不只女人要保养,代码也是如此。面向对象编程,就是把面对的代码当作对象一样,定期对其进行保养。目录一、美颜 Astyle+Source Insight二、祛痘 cppCheck三、返老还童 git四、工

 

不只女人要保养,聊聊代码也是代码的保如此。面向对象编程,聊聊就是代码的保把面对的代码当作对象一样,定期对其进行保养。聊聊

目录

一、代码的保美颜 Astyle+Source Insight

二、聊聊祛痘 cppCheck

三、代码的保返老还童 git

四、聊聊工欲善其事必先利其器

一、代码的保美颜 Astyle+Source Insight

1.1真假小龙女的聊聊问题

都说秀色可餐,同样的代码的保角色,都是聊聊小龙女,但是代码的保效果不一样。

实现同样的聊聊功能,有的代码一目了然,像诗一样赏心悦目;有的却像SHI一样,站群服务器如下面的代码,虽然功能正常,但看起来什么感觉?

//C语言混乱大赛作品 #include <stdio.h> main(int t,int _,char* a) {      return !0<t?t<3?main(-79,-13,a+main(-87,1-_,  main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13?  main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t,  "@n+,#/*{ }w+/w#cdnr/+,{ }r/*de}+,/*{ *+,/w{ %+,/w#q#n+,/#{ l+,/n{ n+,/+#n+,/#;#q#n+,/+k#;*+,/r :d*3,}{ w+K wK:+}e#;dq#l q#+dK#!/+k#;q#r}eKK#}wr}eKK{ nl]/#;#q#n){ )#}w){ ){ nl]/+#n;d}rw i;# ){ nl]!/n{ n#; r{ #wr nc{ nl]/#{ l,+K { rw iK{ ;[{ nl]/w#q#nwk nw iwk{ KK{ nl]!/w{ %l##w# i; :{ nl]/*{ q#ld;r}{ nlwb!/*de}c ;;{ nl-{ }rw]/+,}##*}#nc,,#nw]/+kd+e}+;#rdq#w! nr/ ) }+}{ rl#{ n )# }+}##(!!/")  :t<-50?_==*a?putchar(a[31]):main(-65,_,a+1):main((*a==/)+t,_,a+1)  :0<t?main(2,2,"%s"):*a==/||main(0,main(-61,*a,  "!ek;dc i@bK(q)-[w]*%n+r3#l,{ }:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1); } 

正如女人爱美一样,出门必化妆,拍照必美颜;代码也是需要美颜妆扮,除非你期望后来接手者在心中的十万个诅咒,这TM谁写的?尤其对嵌入式系统产品,升级维护周期长,软件的可读性就显得更加重要;代码规范对后续维护升级是大有裨益的。

1.2 代码式化

一般公司不缺编码规范,缺的是执行。小项目单人完成,编码风格随心所欲;大项目团队完成,编码风格各不相同。目前来说,个人只发现go语言是编译时强制格式化,其他语言编译时,不检查排版格式。对于编码规范,不能依靠个人主观,强推工具自动实现才能提高执行力。

不管编码使用Keil/MDK、Qt等集成工具,网站模板或者纯粹的代码编辑工具Source Insight,一般都支持自定义运行可执行文件,如Astyle。可以客制化新菜单,一键执行Astyle,将代码一键格式化,排版统一、层次分明。

Astyle官网 http://astyle.sourceforge.net/ 按要求下载安装,只需要AStyle.exe即可。关于其使用和参数,可以在进入Documentation。对代码基本风格,{ }如何对齐、是否换行,switch-case如何排版,tab键占位宽度,运算符或变量前后的空格等等,基本上代码排版涉及的方方面面都有参数说明。个人选择的编码参数是

--style=allman -S -U -t -n -K -p -s4 -j -q -Y -xW -xV fileName 

效果如下

int Foo(bool isBar) {      if (isBar)     {          bar();         return 1;     }     else     {          return 0;     } } 

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

1、在选项或者工具下(不同Source Insight版本不同)打开“自定义命令”,添加命令和运行。

2、云服务器选择正确的路径,结合前面的参数类型,最后必须加上 %f,表示对该文件执行,

C:\AStyle.exe --style=allman -S -U -t -n -K -p -s4 -j -q -Y -xW -xV  %f 

3、将该命令插入到编辑菜单,后续在编辑栏点击Astyle,即可对当前文件自动进行格式化排版。

1.3 高级配置

前面只是Source Insight的基础扩展,下面简要说明下高级扩展宏功能,本文只是描述下基本流程。1、配置菜单

2、插入之后,在主菜单栏会出现“工作”的菜单,点击Insertifdef,弹出如下对话框

3、确定之后自动在光标处插入代码

#if defined (ABCD) #endif /* ABCD */ 

4、不止是支持插入if defined ,还包括插入文件头,对h文件插入避免多次包含的宏,对函数插入注释,以及自动添加编辑时间、作者名称等。这些宏配置和前面一样,至于客制化,比如函数注释的内容、格式等,也是可以自由定义。5、配置路径如下

先关闭全部Source Insight工程,再打开Base.PR,编辑utils.em。如前面的宏 Insertifdef就是如下的代码

macro InsertIfdef() {   sz = Ask("Enter ifdef condition:")  if (sz != "")   IfdefSz(sz); } // Wrap ifdef <sz> .. endif around the current selection macro IfdefSz(sz) {   hwnd = GetCurrentWnd()  lnFirst = GetWndSelLnFirst(hwnd)  lnLast = GetWndSelLnLast(hwnd)  hbuf = GetCurrentBuf()  InsBufLine(hbuf, lnFirst, "#if defined (@sz@)")  InsBufLine(hbuf, lnLast+2, "#endif /* @sz@ */") } 

如Ask就是弹出提示语,sz获取输入的内容,再InsBufLine插入两行代码。而这些接口的使用说明,只要打开Source Insight的帮助即可查看。

Ask说明:

例如插入函数注释的代码如下:

szInf = Ask("你为什么要编写这个函数:") szDescription = Ask("请输入函数的使用注意事项和算法实现:")  // begin assembling the title string sz = "/
copyright © 2025 powered by 益强资讯全景  滇ICP备2023006006号-31sitemap