写程序是一种态度(一)strcmp

类别:VC语言 点击:0 评论:0 推荐:

写程序正如做人,是一种态度。在写一个商业级的程序,从写代码的层次来说是否遵守默认的代码风格(code convention)?是否遵循简单、易读和效率?是否防范了预期的错误?是否检查了内存泄漏?是否考虑会有多线程重入?等等。从设计的层次来说是否引入了软件工程的思想?是否采用了OO的模式分析?是否使用UML来主导了整个流程?是否考虑单元测试和集成测试的QA同步?是否定期生成稳定版本?等等。

 

所有的“是”,是一种正确的软件开发态度,它们会让我们短期痛苦,但长远快乐。想成为一个真正有责任感的软件工程师,或者是一个真正有经验的软件架构师(Architect),只有从这一个个“是”中,慢慢体会。

 

六年不停的软件开发,有时并没有让我有什么骄傲感,相反面对有的经典代码,面对前辈或先哲的醍醐灌顶,我的冷汗溢出每个毛孔,令我感到了在这个领域的渺小和无知。也许是好事,人生本来就是螺旋式上升发展的,也许我到了另一个螺旋的开始了。希望用这个系列,同大家探讨一下成长的上升过程,而不是原地盘旋。我将扔掉六年所有的浮躁,从头开始端正态度做程序。

 

分析经典代码是一种最佳方式,我将从最简单但又最绝妙的开始:strcmp

 

int __cdecl strcmp (

        const char * src,

        const char * dst

        )

{

        int ret = 0 ;

 

        while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)

                ++src, ++dst;

 

        if ( ret < 0 )

                ret = -1 ;

        else if ( ret > 0 )

                ret = 1 ;

 

        return( ret );

}

 

这是MS C run-time中的strcmp实现源码。几个问题将揭示它的精髓,会对我们写出相应功能的高质量代码提供指导。

 

1.src和dst都为空串如何返回?

2.为什么要用unsigned char*强制转换?

3.可否用*src替换*dst作为while条件?

4.是否是multithread-safe?

5.能否用于multibyte-character strings的比较?

6.能否用更少行表达?

 

仔细回答了这些问题之后,你会发现思路是否开阔了一些?希望有这种效果。

本文地址:http://com.8s8s.com/it/it2365.htm