2.2.3 了解空白的用法

如果C语言程序里面的某个<space>(空格)或<newline>(换行符)并不用来划分代码,那我们就把它叫作空白。除了这两个字符之外,<tab>(制表符)、<carriage return>(回车)以及某些比较少见的字符也可以充当空白。然而笔者并不建议大家在C语言的源文件里面使用制表符,因为这种符号在不同计算机上对应的空格数量不同,进而导致显示出来的效果也不同,同一份代码可能在你自己的计算机上很清晰,但在另外一台计算机上却显得很乱,使用那台计算机来阅读代码的人很难看出你当时是想通过这样的缩进格式表达什么意思。

所以,笔者建议你在源代码里面坚持使用空格,而不要用制表符。

笔者说的<newline>意思是另起一行,这相当于按键盘的Enter键。<space>的意思则是让你按键盘底部那个横向的长条,也就是空格键。

怎样合理地使用空白有许多种看法。某些程序员特别喜欢以两个空格为单位来缩进代码,另一些人则认为应该用四个空格。还有的人觉得两个和四个都行。实际上,并没有绝对正确的办法,你需要做的是多写代码,多读别人的代码,并注意他们对空白的用法,进而逐渐找到最适合自己的一种方式。

连贯地使用同一套代码格式(以及同一种空白风格)是相当重要的。这样做可以让阅读代码的人熟悉这套格式,让他们能够更加顺畅地阅读代码并理解其含义。反之,如果你混用各种空白风格,那么代码读起来就会很困难,而且你在写这样的代码时,也容易出现各种错误及bug。

下面举一个例子,让大家看看随意混用各种空白格式会造成怎样的后果。这段代码的功能跟最初的Hello, world!程序相同,但其中包含许多没有必要的空白:

当然,这样写出来的仍然是一个有效的C语言程序。它能够通过编译并顺利运行,而且输出的内容也跟原来一样,因为无论你怎样使用空白,C语言的编译器都会把这些东西忽略掉。

刚才那段代码是个反例,所以你不用照着它录入一遍。本书接下来的范例代码全都会按照同一套风格来使用空白并添加注释,你不一定非得采用这套风格,但你应该注意在各种风格之间对比,并用心地选出适合自己的风格。一旦选定,就应该坚持使用这样的风格编写代码。

如果你是为其他人或某个公司工作,那么他们可能会有自己的代码风格。你应该努力按照那套风格去写。有的时候,他们可能并不提供明确的风格指南,因此你需要先观察代码库里面已经写好的程序代码,并从中体会他们所使用的风格。你在修改这些代码时,也必须按照他们现有的风格去改,这样其他程序员以后就能更加顺利地阅读并理解你所修改的代码。

有些编程团队会采用pretty-printer(格式美化工具)来调整源代码,也就是说,每位程序员在写完代码之后,都把源文件交给这样的工具处理一遍,让该工具根据预先定义好的一套格式规则来调整源代码的风格,并把调整之后的结果写回源代码文件。源代码的功能在处理过程中是不会受到影响的。这样的话,每一位程序员所写的代码在经过处理之后都具备同一种风格,因为这些代码全都是按照相同的格式规则来调整的。代码无论由谁来写,处理之后都会变成这样,于是,团队成员只需要关注代码本身就好,而不会为风格方面的差异所干扰。

下面我们把这个简单的Hello, world!程序里所用到的分隔符用表格的形式总结一遍。

稍后我们会看到,表格中的某些符号在不同的语境下有不同的含义。这种符号在不充当分隔符时的含义其实很容易就能通过它所处的语境推断出来。比方说,如果<符号不跟>

配对以充当分隔符,而是单独出现,那么它就是一个表示“小于”关系的运算符。另外,为了让这张表格完整一些,笔者还把前面没有提过的一对分隔符(也就是[])加了进来,这对分隔符用来表示与数组有关的代码,我们会在后面的章节里看到。

接下来,我们开始讲解这些分隔符在C语言的各种语句中的用法。