空白字符与代码样式
本节阅读量:空白字符用于格式化。在C++中,这主要指空格、制表符和换行符。C++中的空白通常用于3件事:代码元素分隔、字符文本中的分隔,和格式化代码。
语言元素必须用空白字符分隔
C++语法要求某些元素由空格分隔。通常在两个关键字或标识符连续放置时,达到互相区分的目的。
例如,变量声明必须分隔:
|
|
如果我们改为键入intx,编译器会将其解释为标识符,然后不知道intx是什么标识符。
另一个例子,函数的返回类型和名称必须分隔:
|
|
当空白作为分隔符时,编译器不关心使用了多少空白。
以下变量定义都有效:
|
|
在某些情况下,换行用作分隔符。比如单行注释由换行符终止。
例如,下面这样写就是有问题的:
|
|
预处理器指令(例如#include)也须放在单独的行上:
|
|
字符串中的空白字符
在字符串中,空白字符也算作有效的字符。
|
|
不同于:
|
|
字符串不允许中间直接换行:
|
|
由空白(空格、制表符或换行符)分隔的字符串将被连接:
|
|
使用空白来格式化代码
空白通常被忽略。这意味着可以在任何地方使用空白来格式化代码,以使其更易于阅读。
例如,以下代码很难阅读:
|
|
以下是更好的版本(但仍相当密集):
|
|
以下代码更好:
|
|
如果需要,语句可以拆分为多行:
|
|
这对于特别长的语句很有用。
代码样式
与其他一些语言不同,C++不会对程序员实施任何类型的代码样式限制。因此,C++是一种与空白无关的语言。
这是一个喜忧参半的特性。一方面,有自由做你想做的事很好。另一方面,多年来开发了许多不同的C++程序格式化方法,会发现在哪种方法最好上存在分歧。基本经验法则是,最好的样式是生成最可读的代码并提供最一致性的样式。
下面是我们对基本代码样式的建议:
- 使用Tab或空格进行缩进都是可以的(大多数IDE都有一个设置,可以将制表符转换为适当数量的空格)。有些人喜欢空格,因为它使格式具有自我描述性——无论编辑器如何,使用空格分隔的代码看起来总是正确的。Tab的支持者,认为Tab是为缩进而设计的字符,尤其是可以将Tab的展示宽度设置为喜欢的任何宽度。这里没有正确答案,争论它就像争论蛋糕还是馅饼更好。取决于个人喜好。
建议将制表符设置为4个空格的缩进值。
- 有两种函数开头的花括号放置方式。
Google C++风格指南建议,将开头的花括号放在与语句同行上:
|
|
理由是,代码段落更加紧凑,可以在屏幕上容纳更多的代码。更多代码更容易理解。
然而,更常用的替代方案是,其中左大括号出现在单独的行上:
|
|
这增强了可读性,且不容易出错,因为大括号始终缩进到相同的级别。如果由于大括号不匹配而出现编译器错误,很容易看到错误位置。
- 每个语句,在它属于的大括号的层级中,以tab或4个空格开头。
|
|
- 每一行不应太长,通常的限制是80个字符(包含空格)。如果屏幕比较大,也可以放宽到120个字符。 如果语句超长,需要在合适的节点换行。换行后相比原语句,前置额外的tab或4个空格缩进。 或换行后的元素和前一行相同类型的元素对齐亦可。
|
|
- 如果换行的地方有一个操作符(例如 + 或者 « )。这个操作符应出现在下一行的开头,而不是当前行的结尾。
|
|
这样可以清楚的看出后续行是前一行的延续,并且对齐左侧操作符,使代码更可读。
- 使用空格将赋值操作,注释对齐。
难以阅读:
|
|
容易阅读:
|
|
难以阅读:
|
|
更易于阅读:
|
|
在本教程中,我们将遵循这些约定。介绍新知识时,同时将介绍与这些功能配套的新样式。
C++提供了最舒适的风格或认为最好的风格的能力。然而,强烈建议使用我们在示例中使用的相同样式。 它已经被大量程序员在数以亿行代码上进行了验证。
最佳实践
在已有的项目中开发时,选择与原有项目一致的代码样式。
自动格式化
大多数现代IDE将帮助在编写代码时自动格式化代码(例如,当创建函数时,IDE将自动缩进函数体中的语句)。
然而,当添加或删除代码,或更改IDE的默认格式,或粘贴具有不同格式的代码块时,格式可能会变得混乱。修复文件的部分或全部格式是个头痛的问题。不过,现代IDE通常包含自动格式化功能,该功能将重新格式化选定的代码或整个文件。
为了更容易操作,建议添加使用键盘快捷,自动格式化代码文件。
还有一些外部工具用于自动格式化代码。clang-format是一个流行的工具。
对于Visual Studio用户
在Visual Studio中,可以在 编辑>高级 下找到自动格式化的选项(设置文档的格式)。
最佳实践
强烈建议使用自动格式功能,以保持代码的格式样式一致。
