分类 技术志 下的文章

追求'lint-clean'

到底需不需要编译器之外的独立的静态代码检查工具呢?这个问题’仁者见仁,智者见智’。但是有一个结论我想大家都会认可,那就是越是在开发周期早期发现的Bug,修复它所付出的代价就越小。而像lint这样的静态代码检查程序恰恰是让Bug在早期阶段’显露原型’的绝佳工具,而追求’lint-clean’[注1]境界的代码也向来是专家级程序员的嗜好。别忘了在’C专家编程’一书中曾经提到Sun OS的内核一直是保持’lint-clean’状态的,这就是榜样!还等什么?赶快学呀!^_^

有人抱怨’不敢用lint工具, 太多的Warnings把快屏幕都淹没了!’,不过高手一般不这么想,他会细心琢磨这些Warnings背后的’暗示’,并和lint工具沟通,利用lint工具提供的交互方法屏蔽掉一些经过分析认为不能成为错误的Warnings。久而久之,高手本身就成了一个lint程序,就能够很快的用肉眼发现代码中的问题,并指出问题所在,如何解决!他还能告知如何嵌入一些Annotations从而避免让lint程序产生不必要的Warnings,这时这位高手对语言和程序的理解就又提高了一个档次了。其实使用ling工具不仅仅是为了提早发现程序中的Bug,其使用过程有助于你加深对程序的认识和理解。的确事实就是这样。

Splint就是一款强大而且应用广泛的开源lint工具。它的强大的代码检查能力固然让人称道,但是让我更欣赏的却是它提供的’Annotations’机制。Splint可以让程序员在自己的代码中嵌入相应的Anotations,这些Anotations作为Splint分析代码时的输入以帮助Splint产生对程序员更有用的信息。下面是一些Splint的使用入门,更多详细信息请查看’Splint manual‘。

1、最简单的Splint使用方法
>> splint *.c

2、Splint输出Warnings的基本格式
<file>:<line>[,<column>]: message
     [hint]
      <file>:<line>,<column>: extra location information, if appropriate
我们可以使用’+/-<flags>’来自定义其输出格式,如’splint -showcol *c’,则Splint不会在输出信息中显示’列’信息。

3、使用flags控制splint的检查范围和输出格式
‘+<flag>’ — 表明某个flag处于打开状态,如’+unixlib’;
‘-<flag>’ — 表明某个flag处于关闭状态,如’-weak’;

4、使用.splintrc环境文件
如果不想每次使用splint的时候都手工输入一堆’+/-<flags>’,那么你可以把这些’+/-<flags>’预先写到.splintrc文件中,当splint执行的时候它会自动加上这些flags的。默认的flags设置在’~/splintrc’文件中,但是如果一旦splint的当前工作路径下也有.splintrc文件,那么这个.splintrc文件中的flag设置会覆盖’~/splintrc’中的flags设置,但是命令行中的flags设置是具备最高优先级的,它会覆盖前面提到的任何一个文件中的flags设置。

5、使用Annotations
对于’Annotations’的作用,Java程序员并不陌生,但是C程序员则对这个不是那么了解。C代码中的Annotations用来指导Splint生成恰当的代码检查报告。下面这个例子对比使用和不使用Annotations,Splint的输出的差别:
/* testlint.c */
void foo1() {
        /*@unused@*/int *p = NULL;
}

void foo2() {
        int *p = NULL;
}

splint testlint.c
Splint 3.1.1 — 28 Apr 2003

testlint.c: (in function foo2)
testlint.c:6:7: Variable p declared but not used
  A variable is declared but never used. Use /*@unused@*/ in front of
  declaration to suppress message. (Use -varuse to inhibit warning)

Finished checking — 1 code warning

可以看出没使用Annotation的函数foo2被给出Warning了。Splint的Annotations繁多,我们在平时做lint时可以多多接触。

‘早用lint,勤用lint’,这是C专家给我们的建议。’lint-clean’也许离你并不遥远。

[注1]
‘lint-clean’ — 程序能够顺利通过lint程序的检查。

见识思维导图

不瞒大家说在未听说思维导图之前,我自己就常常在废旧打印纸背面画那种’枝繁叶茂’的、很发散的需要费力才能将其中的信息串起来的’思考图’(我那时就这么叫它)。我喜欢思考,但却常常因为没有及时把自己思考出来的好想法记录下来而遗憾,因为有些灵感是’来去匆匆’的,你可以在不经意的0.1秒得到这个灵感,可是之后你再花1个小时’冥思苦想’也迸发不出来这样的想法了。现在我的’思考图’有了’大名’了,叫’思维导图’,不过伴随之而来的还有如何去画’思维导图’。习惯了’乱画思维’的我反倒感到一些不适应,不过这些理论毕竟是经过科学证明的,值得学习。而且按照一定科学的方法画思维导图可以帮助挖掘思维潜力。

在这里不想说思维导图有什么好处,如果你感兴趣大可到网上去’搜’。我则是因为喜欢这种表达思维的方法才主动去学如何去画思维导图。我的第一感觉我的思维过程类似一个’图的遍历’过程,而且是一个’先广遍历’和’先深遍历’的结合,往往在’深入的同时’又迸发出’广度’的想法。

画思维导图最好的工具组合就是一张白纸和一支铅笔(虽说思维导图建议最好五颜六色,但是我天生对颜色不敏感,所以只喜欢黑与白)或一面白板和一枝黑色彩笔。最原始的也是最快捷、最有效的。这也是我最喜欢的方式。不知道又没有人和我一样往往用着最先进的工具却’无米下锅’,如有的作家就喜欢白纸黑字的写作方式,他认为只有这样做才有源源不断的创作灵感,相反面对计算机屏幕和枯燥的键盘,太容易引起’思维麻木’了。在计算机上画思维导图不乏’制作精良’的工具,其中的典型代表有’开源的FreeMind和收费的MindManager,两者各有千秋,试试便知。

很多关于思维导图的教材都提到环境和工具的重要,在什么图景世界、静、音乐的环境等,使用色彩丰富的彩色笔等。我想对于不习惯于发散思维的人这些可能很重要,但是如果一旦习惯了这种思维方式,工具因素可能就不那么重要了。不过环境因素仍然起作用,而且感觉可能不同的人适应不同的环境。我自己就感觉我的思维在一个相对自我的环境下比较容易迸发灵感,我自己亲身体会:在笔直的长马路上疾步行走会让我感到思维加速,常常会有很多新想法萌生,而其他人则未必喜欢这样。

关于思维导图的一些教程主要以练习为主,因为本身思维导图就是一种发散的东西,非要用’规律化’的理论去约束它只能起到适得其反的作用。但是总’撒网(发散自己的思维)’也要学会’收网(整理和总结自己的思维)’, 否则就会没有收获,白想了。’撒网’需要练习,同样’收网’也许要训练,特别是当你所画的思维导图需要和别人分享时,比如一份工作计划,你不能把你的’纯思维’让大家去猜测,你需要整理出一份规整的报告,而你的思维导图则有助于你形成这样一份报告。

按照一些理论上所说,思维导图有四大要素:关键词(右上分枝)、层次(右下分枝)、图像(左上分枝)和联想(左下分枝),还有至关重要的一点要牢记:’始终围绕Central Topic’。至于如何去理解这些,这里不想多说,因为那不是我的成果。思维导图目前广泛应用在各种场合,如制定计划、产品分析和设计、会议记录等等,我想一切大脑能用得上场合的地方,思维导图都应该用得上^_^。

总之,我画思维导图的原则只有四个字:’随心所欲’^_^。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言进阶课 AI原生开发工作流实战 Go语言精进之路1 Go语言精进之路2 Go语言第一课 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com
这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats