man RobotomID:robotom
7510次访问,排名12862(-7)好友2人,关注者2
http://blog.csdn.net/robotom/
robotom的文章
原创 17 篇
翻译 0 篇
转载 0 篇
评论 4 篇
robotom的公告
DebuggerAide 1.0.1.103 Beta3版本已经开始做了。
最近评论
hdnero:wow power leveling
yur505:怎么安装完了需要注册吗??怎么不能用啊.
roger_77:有机会试试
roger_77:有空要好好看看.希望从中能得到更多更好的启发.
文章分类
收藏
相册
C_C++
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 写别人看得懂的C/C++代码收藏

新一篇: C++软件移植方案 | 旧一篇: 写可移植的C/C++代码(2)

写别人看得懂的C/C++代码

   首先必须澄清一个误解,就是代码写的越难懂,写代码的程序员就越厉害。事实不是这样的,恰好相反,代码写的难懂,说明这个程序员的编码质量越差。

代码的质量,不仅仅包括在满足功能需求的前提下,代码是否高效是否稳定, 还应包别人是否很容易就能理解。在一个企业中,代码写出来迟早是要给别人看的。既然别人要看你写的代码,那么自然免不了要理解它。相信大家都有这种感觉,就是一段代码,如果没看明白,很难在原有代码上去修改它的功能。正因为如此,大家都不愿意去接手一份很难看明白的代码。看懂代码有多重要,写看得懂的代码就有多重要。

这里就C/C++代码的可读性谈一点自己的体会。

   按照难度逐渐加大的次序,理解一份代码的方式排列方式如下:

ü         看目录/文件//函数/变量名称(容易)

ü         静态阅读函数详细代码(较困难)

ü         正常执行代码(困难)

ü         动态调试代码(非常困难)

ü         单步调试代码(非常困难)

 

可以看出来,仅仅通过目录/文件//函数/变量名称就让人理解代码的功能,是最理想的增强可读性的方式。实在不行,通过静态阅读函数详细代码就能理解,也是可以接受的。如果要通过动态调试代码才能理解,可读性已经不怎么样了。如果要单步调试才能理解,那么基本上是不可维护的。维护这样的代码,与其花大量时间去单步调试,还不如重新实现一个更好的。

物理文件布局

  一个项目包含100.cpp文件,如果都存放在一个目录里,会显得比较零乱。这时可以按照模块分别存放在不同的子目录里,从而显得比较清晰。不同模块的代码放入不同的目录,让别人在看某个文件的代码之前,心里就能有一个大概的方向,从而更快的理解代码。在一个多人项目里,这样做也便于使用版本控制工具进行权限管理。对于一个包含大量文件的工程项目,设计出良好的目录结构是确保代码可读性的第一个有效措施。

命名原则

  命名包括文件命名和类、变量、函数等的命名。这里谈几个最重要的命名原则。

ü         名称与功能相适应

如果说眼睛是心灵的窗户,那么名称就是功能的窗户。最理想的命名是看了文件名,就不用看文件的内容;看了函数名,就不用看函数的实现。

ü         英文还是拼音

  尽量使用英文,毕竟在程序设计世界里英文才是真正的通用语言。当然,如果发现业务所在领域的专业英语非常复杂,又是针对中国客户时,使用拼音也不失为一个好办法。最忌讳在同一个文件中,甚至同一个函数中混杂英文和拼音两种命名方式。

ü         名称长度适中

  尽管现在的编译器对于符号长度的限制越来越小了,但是还是要选择一个长度适中的名称。名称太长,一眼看不过来,影响阅读。名称太短,又很难精确表达功能含义。一般在412个字母比较合适。

ü         循环计数器

如果循环体的代码很多,循环计数器又参与到循环体的代码中,尤其是有多重循环,那么最好为婚环计数器选用一个有意义的名称,否则,使用象i,j,k之类的名称显得更简洁。

 总而言之,让人一眼就能看明白而且不用看注释不用查文档的名称,就是好名称。

   

保持单纯

保持单纯就是保持功能的单一。文件、类、函数以及变量,都是如此。一个文件,尽量只做一件事情,如果必要,也可以扩大到只做一类功能相关的事情。一个类,只实现一组密切相关的功能。一个函数,那就真的只能做一件事情了。一个变量,只表示一个属性或者状态。

 

状态无关的变量

变量的含义特别忌讳与系统状态有关。一个变量的含义,在程序员声明它的时候已经唯一确定了,系统状态的改变,只能改变变量的值,而不能改变变量固有的含义。如果随着系统的运行,同一个变量刚才代表物体的数量,现在又代表物体的质量,那就让人难以理解。

慎用struct-type-union-struct

常见的struct-type-union-struct就是类似下面的定义:

Struct  Geometry {

GeometryType   objType;

Union GeometryInternal {

     Struct  Point    pt;

   Struct  Polyline  line;

   Struct  Polygon  area;

}
 };

Struct Geometry  geo;

Geo是一个PointPolyline还是Polygong, objType的值决定.。这似乎没有问题,但是,程序员必须保证objTypept/line/area的一致性。这给别人的理解造成了困难。因为这意味着在静态分析代码的情况下,别人很难明白geo到底是什么,pt , line, 还是area?

一些经典的类型定义在这方面起到了误导程序员的副作用。比如VC里的VARIANT结构体就是这样。

 

 

作者信息

Email     robotom@sina.com

MSN      robotom@sina.com

BLOG    http://blog.csdn.net/robotom/

 

发表于 @ 2007年03月30日 19:41:00|评论(loading...)|编辑

评论:没有评论。

发表评论  


登录
Csdn Blog version 3.1a
Copyright © robotom