Chinaunix首页 | 论坛 | 博客
  • 博客访问: 347815
  • 博文数量: 72
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 632
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-08 16:54
文章分类

全部博文(72)

文章存档

2007年(54)

2006年(18)

我的朋友

分类: C/C++

2007-05-10 22:05:39

做程序员最大的痛苦莫过于看一堆代码风格很ugly的代码了,有一个工具可以简单的实现代码的美化,这就是GNU下的工具indent。
 
indent-orig xxx.c
其中-orig是表明格式化后的代码是BSD风格的,indent还支持GNU,BSD等普通风格。实际上,每种普通风格均是indent一大堆参数的缩写,也就是说,你完全可以定义和这些普通风格都不同的自定义风格。
indent的手册(man indent)写得非常详细,几乎每一个代码美化的细节,它都涉及到了。如果你上班时,既不能上网,又不想写代码,我建议你仔细阅读indent的手册,然后定义出完全符合你要求的indent参数来。如果你时间不多,不如试一试indent的各种普通风格,找出一个和你的要求差不多的,然后调整至满足你的要求。
具体风格下文详细分析:

K&R风格:
if () {
以传说中的Kernighan & Ritchie之名命名,因他们的样例代码而被广为接受。又因Unitx内核使用这种风格,所以又被称作Kernel Style,也被它的信徒称作One True Brace Style。也因为C代码主要使用这种风格,也被其他类C语言的使用者称作C风格。

这种风格的流行,一是因为大部分教学书籍使用这种风格以节约纸张成本,二是随着Java的普及而被广泛接受。
优点是代码相当紧凑,对低分辨率的显示器和打印文稿来说很有价值;
缺点在有些情况下匹配大括弧有些困难,并且也因此产生很多子派别。如:
if () {
} else {
}

if () {
}
else {
}
当if语句的条件很长需要折行时,也有不同的处理方式:
if (aVeryLongBooleanExpression && anotherVeryLongBooleanExpression &&
yetAnotherVeryLongBooleanExpression) {
    DoSomething();
}

if (aVeryLongBooleanExpression && anotherVeryLongBooleanExpression &&
yetAnotherVeryLongBooleanExpression) {
    DoSomething();
}
或干脆把大括弧放下来
if (aVeryLongBooleanExpression && anotherVeryLongBooleanExpression &&
yetAnotherVeryLongBooleanExpression)
{
    DoSomething();
}
另外有很多人喜欢在类和函数的上将大括弧独占一行,而语句里使用标准的K&R风格。如C#语言标准里的样例和Apache项目就使用了这种风格。这种写法也被认为是不同于K&R的另外一种风格。
void DoSomething()
{
if () {

BSD风格:
if ()
{
}
以Berkeley黑客Eric Allman之名命名,也叫Ansi风格,大括弧独占一行。这是除了K&R风格外,唯一的在Java社群里大量使用的风格,而Dos/Windows程序员大部分使用这种风格,在这个社群里也被称作标准风格。
优点是在所有的地方大括弧都是对称的,大部分人认同这种风格的代码更易读;
缺点是浪费空间,比如:
try
{
    DoSomething();
}
catch
{
    DoSomething();
}
如果你无法忍受浪费的行,最好的办法就是用这些行来写注释。
 
 
GNU风格:
if ()
{
     DoSomething();
所有GNU EMACS和自由软件基金会的代码都使用这种风格,除此之外没有其他地方使用。大括弧距离两边各两格。
 
结论:
对于这种没有正确答案的争论,最有效的方法是不要找任何理由,不用比较优劣。如果项目组内使用的工具或软件包是使用某一风格的,那么就和它保持一致;除此之外,选最易于统一管理的BSD风格。
阅读(3141) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~