不只女人要保养,聊聊代码也是代码的保如此。面向对象编程,聊聊就是代码的保把面对的代码当作对象一样,定期对其进行保养。聊聊
目录
一、代码的保美颜 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 %f3、将该命令插入到编辑菜单,后续在编辑栏点击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 = "/