◇◇新语丝(www.xys.org)(xys3.dxiong.com)(www.xysforum.org)(xys2.dropin.org)◇◇ 再谈谭氏源码风格 作者:时进 感谢wanderor在《也谈谭浩强》一文中向我指出我在前文中列出的“奇怪的大括号和 缩进方式”其实是GNU Style。在网上查了一查这方面的文章,确实如此。 不过这并不能否定我对谭先生的书中的源码格式的指责:格式混乱,并不统一。 回头再仔细对比了一下谭先生的《C程序设计》第二版(1999)和第三版(2005) ——因为我以前读的是第二版,学生现在用的是第三版,恍然大悟,结论如下: 1、第二版(估计第一版也是如此)的源码格式是混乱不堪的,可以找到多种多样的 谭氏独特风格。从第5章中顺手就能找出这样的例子: p93, 例5.1 main() { float a,b,t; scanf("%f,%f",&a,&b); if(a>b) {t=a;a=b;b=t;} printf("%5.2f,%5.2f",a,b); } p95,例5.3 main() {int x,y; scanf("%d",&x); if(x<0)y=-1; else if(x==0)y=0; else y=1; printf("x=%d,y=%d\n",x,y); } 当然,这是简单的程序,更复杂一点可见p100,例5.5(有点长,不抄写了),那个风格 才叫独特呢!——而且,神奇的是,这三个程序的源码风格就让人无法把它们归究为哪一 种通行的风格,翻遍全书就更难说了。 2、第三版(第二版发行了6年之后!)中的源码格式大致地做了一个统一处理,使 用的是GNU Style。但是,你仍然可以清楚地看出修订者其实是没弄懂GNU风格的。从下 面这几个例子的main函数的大括号和语句的位置可以看出来: p98, 例5.1(大括号缩进2格,内部首行语句在下一行,再缩进2格) void main() { ... } p99, 例5.2(大括号不缩进,内部首行语句在下一行,再缩进4格) void main() { ... } p254, 例10.19(大括号缩进3格,内部首行语句紧跟大括号,缩进2格) void main() { ... ... } 总之,在该书的格式中,你看不出对大括号和缩进的统一格式要求。学生也许能从中学 习GNU风格,但却是散漫无规则的谭浩强修改版。 最后,我要说的是,我感到奇怪,虽然更为通行的是K&R风格和BSD风格,为什么该书 要使用GNU 风格呢?也许作者要向我这种人炫耀一下他对GNU的推崇?既然推崇GNU,为什 么在该书中不干脆推介GCC编译器,而要介绍 Turbo C 2.0 和 Turbo C++ 3.0 呢? ——而且,实际上根本不存在“Turbo C++ 3.0”这个软件产品,正规的名称是“Borland C++ 3.0”。 (XYS20090315) ◇◇新语丝(www.xys.org)(xys3.dxiong.com)(www.xysforum.org)(xys2.dropin.org)◇◇