程序员之路--关于代码风格
优秀的代码风格如同一身得体的打扮,可以给人以良好的印象。初学程序设计,首先必须创建良好的编程习惯,这其中就包括代码风格。本文就代码风格中的几个重点问题进行了讨论,并在文后给出了一份优秀的代码做为风格模板。代码风格没必要花费太多专门的时间研究,在使用中不断模仿模板代码,轻轻松松就能写出“专业的代码”。
1、80字符,代码行极限
不管时空怎么转变,世界怎样改变,一行80字符应始终铭记心间。古老的Unix终端以80列的格式显示文本,为了让源代码与手册具备最佳的可读性,Unix系统始终坚持着80列的传统。80列很少很多,足够写出一行有意义的代码,同时也足够显示在终端屏幕,足够打印在A4纸上。虽然时至今日,咱们的屏幕分辨率早已足够高,一行可以显示的内容远超超过80字符,但咱们的优秀传统已经造成──几乎全部的Unix/Linux内核源代码以及联机用户手册都严格地遵照着80列极限。若是你正好在使用Windows平台下的Dev
C++,你是否有注意到代码编辑框里那条细细的灰色竖线?不错,那正是代码行极限。除了HTML、XML等冗长繁复的标记式语言,几乎全部的语言都须要严格遵照代码行极限,这包括C、C++、Java、C#、Python、PHP等等。不过有时,好比当PHP跟HTML打交道的时候,这个限制是能够暂时放松的。过长的代码行老是很差的,好的代码要始终保持苗条的身材。
2、Tab仍是Space,众说纷纭的缩进方式
代码离不开缩进,关于缩进主要有两个争论,一个是该用空格(Space)仍是用制表符(Tab),另一个是该用4格缩进仍是8格缩进甚至都不是。
先来谈谈Space与Tab的问题。坚持用Space的程序员会告诉你,若是你历来都不用Tab,那么你的代码放到全部的地方看都是同样的。没错,这是用Space缩进的优势,惋惜的是,这是它惟一的优势。代码层次越多,内层代码最前面的缩进便越多,这意味着你须要敲不少不少次空格。即便你能忍受不厌其烦地按空格键直到它坏掉,你也必定会被IDE老是自做聪明地插入一些Tab字符的行为烦恼不已。建议老是使用Tab缩进,由于几乎全部的代码(不只仅是C代码)都在使用Tab缩进。
Tab究竟是4格仍是8格?这是Tab缩进会被某些人诟病的根源。当你写程序时使用的Tab大小与别人读程序时使用的Tab大小不一样时,再漂亮的排版也会变得杂乱无章。标准的Tab是8格的,而不幸的是,几乎全部的Windows平台下的IDE,包括Visual
Studio、Dev
C++,甚至跨平台的Eclipse等,都默认使用4格Tab。我使用的FreeBSD系统的全部的内核源代码都采用8格缩进,因此我一直坚持使用8格缩进。也许你不习惯太大的间距,若是不是在Unix平台下,或者不是C语言,那就采用4格Tab吧。若是你在Unix下编写C代码,使用8格的标准Tab是更好的习惯。
3、折行原则,容易被忽略的角落
既然有代码行极限,不少状况下咱们不得不断开一个完整的代码行,这就带来了一个问题:折行后应该如何缩进?好的作法是,第一次折行后,在原来缩进的基础上增长1/2的Tab大小的空格,以后的折行所有对齐第二行。可能这样的文字描述过于晦涩了,仍是举个例子罢(以8格缩进为例):
if
(value > a && value > b && value > c && value
< d && value < e && value < f value < h
&& value < h) { /* 注意折行后的缩进 */ value = value +
1; value = value * value * value * value * value * value * value *
value * value * value + value * value * value * value * value *
value * value * value; /* 注意再次折行后的缩进
*/} 显然这个段代码没有任何实际用处,只是为了说明折行缩进而编造的。
4、无处不在的空格,无处不在的空行
须要空格的位置有:
1)if、while、switch等关键字与以后的左括号(之间。
2)左花括号{以前。
3)双目运算符两侧,例如p
== NULL。
4)逗号,与分号;以后,例如for (i = 0; i < 10;
i++)。
不要空格的位置有:
1)函数名与以后的左括号(,包括带参数的宏与以后的左括号(,例如max(a,
b)。
2)分号;与冒号:以前。
3)左括号(右边,右括号)左边,例如if (p ==
NULL)。
须要空行的位置有:
1)函数的定义以前、函数的定义以后
2)一组联系紧密的代码段以前和以后
这些规则并不彻底,当你碰到上面没有列举出来的状况时,请参考本文提供的模板代码。
5、左花括号的争议──换行乎?不换乎?
这又是一个仁者见仁智者见智的问题了。从使代码更清晰的角度看,做为代码段开头标识的左花括号{应该另起一行:
if
(p ==
NULL){ printf("error!\n"); exit(0);} 但是,这看起来实在不够紧凑,因此大部分的C代码(至少Unix上如此)都采用了这样的方式:
if
(p == NULL)
{ printf("error!\n"); exit(0);} 个人建议是采用后者,这会使你的代码显得更加紧凑,也更加专业。须要说明一个特例,在定义函数时,咱们老是要给左花括号{换行:
static
intmaxint(int a, int b){ return a > b ? a :
b;}
6、坚持美观、灵活对待
代码风格远远不止上面提到的五点,事实上,不少公司都有规定的代码风格,包括命名规则、缩进规则等。若是你在一个开发团队中,应该始终以团队的标准为主,而若是你只是在学习C语言并试着造成本身的代码风格,我将在这里给一份最专业的源代码供你参考。你的任何疑问,在这份代码里必定能够找到答案:Code
Style(注意查看时将Tab设置为8格)。这份代码来自优秀的FreeBSD操做系统内核源代码(版本6.2),你必定不会置疑它的权威性。更多内容请参考FreeBSD内核代码编写规范,你也许须要一些耐心才能读完这篇英文文档。程序员