Notes on Programming in C--C语言编程笔记(一)

Notes on Programming in C--C语言编程笔记

                                                 Rob Pike
                                                 February 21, 1989
序言

    Kernighan和Plauger写过一本很重要,也很有影响力的一本书,叫做《The Elements of Programming Style》。不过有时我感觉书中总结的规则更像是一种严格的约束编程风格的方法,而不是它们内含哲学的精简恰当的表达。如果像书中所说的那样,变量名应该更有实际的意义,那么一个冗长的有意义的名字真的更好一些么?MaximumValueUntilOverflow比maxval更好么?我可不这么认为。

    下面的所有文字都是一些短小的文章,想要把编程中关键的地方说明清楚,而不是给出严格的规则。我不期望你同意我所有的观点,因为观点随着时间都是会改变的,但它们已经在我大脑里聚集了很长时间了,是我大量经验的总结,在此记下来希望能帮助你理解如何去计划一段程序的细节之处(以前我看过一篇教你如何计划所有事情的很好的文章,但它们的内容只是我将要谈到的一部分)。如果你觉得这些建议只是个人习惯,你也不同意它们,这样很好,但是如果你能想想不同意的原因,那就更好了。最后,不要因为我这么说,你就这么做,只按你觉得能达到目标的最好的方法去做,不要在乎我的感受。

    欢迎你的评论。

 

版式问题

    程序是一种公开的东西,这意味着它将被一个接一个不同的程序员所阅读(也可能是几天、几星期或者几年后的你自己),最后交给机器处理。机器当然是不关心你的程序写的多么优美-只要程序能够编译通过,机器就很满足了-但作为人就不一样了。有时他们在乎很多:
良好的版式布局能让程序的细节更容易理解,就像把英语文章中的介词都用粗体显示一样。
尽管一些人认为程序应该看起来就和Algol68报告一样(一些系统甚至要求程序员使用这种风格),但是一个清晰的程序不会因为使用了这种风格而变得更加清晰,同样,一段糟糕的程序只能依旧糟糕。
    良好的版式约定能够让程序更清晰,缩进也许是最众所周知也最有用的例子了。所以如果你坚持使用陈旧的无格式的风格,也请你注意别使用愚蠢的版式。千万别刻意修饰程序,例如要保持注释简洁明了。在程序中只表达必要的东西,保持简单性和一致性。

变量的名字

      啊,变量的名字呀,长度不是你的美德,清楚的表达才是你应有的作用。全局变量很少使用一个很长的名字,像maxphysaddr这样就挺好。在循环中使用数组的索引没有比i更好的了,使用index或者elementnumber这样的名字更像是在说一种类型,同时也隐藏了它计数的本质。当变量名很长时,很难注意到程序的运行流程。这是版式问题(typographic issue)的一部分,可以考虑
         for(i=0 to 100)
                array[i]=0
   和
         for(elementnumber=0 to 100)
                array[elementnumber]=0;
实际程序中的这种问题使得程序很糟糕,所以索引并不需要一个有意义的名字,简单就好。
     指针也应该有一个清楚的标识。np要比nodepointer更容易记忆,如果你了解一些命名约定,就会知道np就是从node pointer简化来的,下面还会有一些关于命名约定的内容。
     一致性很重要,这也是所有易读程序的共同特征,在程序中的命名也应当统一。如果你已经给一个变量命名为maxphysaddr,就不要给它的同类变量命名为lowestaddress。
     最后我想说,我更欣赏那些有着最短的长度但却包含最大量信息的名字,让变量的更多意义通过和它相关的程序来表达。比如,全局量通常在程序中使用次数很少,所以它应当有一个更容易让人明白它意义的名字。因此我使用maxphysaddr而不是MaximumPhysicalAddress给全局量命名,给局部指针命名使用np而不是NodePointer。在很大程度这是一种个人品味和习惯,但这方法能让程序更清晰易读。 
     我避免在变量的名字中使用大写字母,对我的眼睛来说,它们看起来又笨又不舒服,和一个糟糕的排版差不了多少。

你可能感兴趣的:(C/C++)