2006年三月月 发布的文章

追求'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程序的检查。

2006IT书讯之经典重现篇

我想最近最忙的应该是各大网络书店了,一本本好书真是如'雨后春笋'般出现在各大书店的'书架'上,这也让我们这些做程序员的过了把书瘾!还等什么呢,掏钱包,把书抱回家读吧,都是经典!下面一一道来。^_^

首当其冲的就是'Unix编程艺术',又名'TAOUP',它也是最先于年后上市的一本经典好书。我上周购了一本,只是由于最近项目紧,还没来得及看,书的质量没的说,至于译者的翻译么,由于还没仔细看呢,所以不便评价。感觉这本书对那些Unix下编程的初学者可能帮助不大,但是对于已经有多年Unix下大型系统设计的人来说,看这本书的过程其实也是一个总结自身经验的过程。书中涉及Unix系统设计的方方面面,绝对是大师级人物Eric S. Raymond的经验之谈。

万众期待的'代码大全'第二版也已经出炉,大家都说好,不过说实话,我还没看过,但我想总不能'空穴来风'吧,估计肯定有它值得称道的地方。如果周末有空一定买来瞧瞧。

'深入理解Linux内核'第三版英文版终于和大家见面了,我也是今天才在'互动出版网'看到的,真该感谢东南大学出版社,要知道这本书的第二版已经绝版了。我相信对于想学习Linux内核的朋友这是一本必备的好书。

我是于前两天才听说'Write Great Code'这本书的,那还是在公司内网上讨论'代码大全'第二版好与坏的时候一位同事提出来的,昨天就在'ITPUB'上看到并下载了此书,共两卷。浏览了一下第一卷'Understanding the machine',觉得是本不错的书,内容类似于名著'深入理解计算机系统', 甚至有些东西讲解的比后者更加详细和透彻。今天无意间在'第二书店'上发现一本叫'编程卓越之道,第一卷,深入理解计算机'的书,直觉告诉我它们是同一本书,打开页面后,果然不出所料,又是'博文视点'联系出版的书,牛!赞!

其他的诸如'Head First Design Pattern'、'C++ Primer 4th'等书也已经上市,经典书这么多,我们要做的就是找时间好好拜读!

我的本本3岁了

晚上下班回到寝室,照惯例拿出我心爱的本本,翻开屏幕,发现屏幕上的一层薄薄的灰尘,顿想起来该给我的本本做’基础护理’了,顺便也把尘封已久的电池拿出来充放电一次。到今天为止,我的本本已经整整陪伴我三年零15天了。三年的记忆足够让我在脑子中回放一段时间了。

记得那是2003年的3月15日,我阳历生日后的第七天,我拿到了我的生命中的第一个’本本’,理由很简单,父母送的生日礼物呗^_^。为了它,我不知道跑过几次数码卖场,问价、侃价。当把本本拿到手那一刻自然’爱不释手’。我的本本是Acer的TravelMate230,配置在当时也不算高,不过结合我的预算和自己的需求,我觉得它是最合适的,事实证明我的选择也是没错的。当时我买笔记本不为别的,就是想不和别人抢电脑,因为我要连续的写程序。做程序员的都知道编程时需要连续的思维。自那以后,每天大学寝室都能看到我坐在床上写程序的身影。有人会问为什么坐在床上呢?没办法呀,寝室空间狭小,地面那十平米的空间早已被同寝哥们儿们的’大个子’台式机所霸占,根本就没有我的本本的容身之地。而且我还住在上铺,这就更增加了使用电脑的难度。’多亏’当时我们班班长的多功能电脑桌坏了,我就’霸占’了那个电脑桌的’顶板’,把这顶板放在枕头上,一个临时的’上铺电脑桌’诞生了!坐在床上使用本本自然难受,所以只能不停的变幻着姿势,并时不时地下床活动活动。就是在这种环境下,我一直坚持了一年,直到之后来到现在的公司实习,而我的本本也在这种环境下存活了下来,而且是’茁壮’成长^_^。虽然我的本本配置较低,显卡是Intel的,共享显存。就这样我仍然在之上玩过像’Diablo II’、’抢滩登陆’、’FIFA2004′等我比较喜欢的游戏(说实话,自己并不是游戏Fans,玩游戏纯属编程累了之后的休息)。在毕设阶段,我的本本也是功不可莫。那时候经常带着我的本本在图书馆、寝室和实验室三点一线间来来往往,本本能让我及时输入我想要的资料。

学生时代的我的本本虽然也很忙碌,但是比起我工作以后那简直是’小巫见大巫’。毕业之后成了一名职业程序员,我的本本每天几乎是16小时开机,从早上8:30上班一直到晚上24点左右,我的本本一直在忙碌。虽然公司给配发了台式机,但是已经习惯了看液晶屏的我早已不能忍受CRT显示器的辐射了,直到现在我也一直在使用我的本本。其实本本每天受到’最大伤害’的就是它的键盘,我估计我每天要敲击成千上万次键盘吧。可我的本本重来都不抱怨,即使是在其键盘上的符号都被我磨掉的情况下,它仍然好好的工作着。令我庆幸的是到目前为止我的本本还没有一次’病例记录’,这里我可不是给Acer作广告,起码我的本本是这样的,不过在网上也看到很多人抱怨Acer的本本质量越来越差了,也许我是幸运的一个吧,让我挑中这台可爱的本本。在这里我许下一个心愿:只要我的本本能够完好的保持它的’状态’,我就会一直使用它、呵护它的,等它6岁、9岁的时候我还要发文纪念!

电池充满电了,呵,不错,它的电力仍然那么充沛,还能挺2个小时!^_^




这里是Tony Bai的个人Blog,欢迎访问、订阅和留言!订阅Feed请点击上面图片

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

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


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

比特币:


以太币:


如果您喜欢通过微信App浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:



本站Powered by Digital Ocean VPS。

选择Digital Ocean VPS主机,即可获得10美元现金充值,可免费使用两个月哟!

著名主机提供商Linode 10$优惠码:linode10,在这里注册即可免费获得。

阿里云推荐码:1WFZ0V立享9折!

View Tony Bai's profile on LinkedIn


文章

评论

  • 正在加载...

分类

标签

归档











更多