8 格式
每个人都可能有自己的代码风格和格式,但如果一个项目中的所有人都遵循同一风格的话,这个项目就能更顺利地进行。每个人未必能同意下述的每一处格式规则,而且其中的不少规则需要一定时间的适应,但整个项目服从统一的编程风格是很重要的,只有这样才能让所有人轻松地阅读和理解代码。
8.1 行长度
规则:每一行代码字符数不超过 80。
这条规则是有争议的,但很多已有代码都遵照这一规则,因此一致性更重要。
优点:
提倡该原则的人认为强迫他们调整编辑器窗口大小是很野蛮的行为。很多人同时并排开几个代码窗口,根本没有多余的空间拉伸窗口。大家都把窗口最大尺寸加以限定,并且80 列宽是传统标准。
缺点:
反对该原则的人则认为更宽的代码行更易阅读。80 列的限制是上个世纪 60 年代的大型机的古板缺陷,现代设备具有更宽的显示屏,可以很轻松地显示更多代码。
结论:
每行代码 80 个字符是最大值。
例外:
如果无法在不降低易读性的条件下进行断行,那么注释行可以超过 80 个字符,这样可以方便复制粘贴。例如,带有命令示例或 URL 的行可以超过 80 个字符。
原生的字符串可能包含超过 80 个字符的内容,除了测试代码,这样的文字应当放在文件头部。
包含长路径的#include 语句可以超出 80 列。
头文件保护可无视该原则。
8.2 非 ASCII 字符
规则:尽量不使用非 ASCII 字符,不得不用时必须使用 UTF-8 编码。
即使是英文,也不应将用户界面的文本硬编码到源代码中,因此非 ASCII 字符应当很少被用到。特殊情况下可以适当包含此类字符。例如,代码分析外部数据文件时,可以适当硬编码数据文件中作为分隔符的非 ASCII 字符串,更常见的是 (不需要本地化的) 单元测试代码可能包含非 ASCII 字符串。此类情况下,应使用 UTF-8 编码,因为很多工具都可以理解和处理 UTF-8 编码。
十六进制编码也可以,能增强可读性的情况下尤其鼓励,比如"\xEF\xBB\xBF",或者更简洁地写作"\uFEFF",在 Unicode 中是零宽度,无间断的间隔符号,如果不用十六进制直接放在 UTF-8 格式的源文件中,是看不到的。
使用 u8 前缀把带\uXXXX 转义序列的字符串字面值编码成 UTF-8。不要用于本身就带 UTF-8 字符的字符串字面值上,因为如果编译器不把源代码识别成 UTF-8,输出就会出错。
别用 C++11 的 char16_t 和 char32_t,它们和 UTF-8 文本没有关系, wchar_t 同理,除非你写的代码要调用 Windows API,后者广泛使用了 wchar_t。
8.3 空格还是制表位
规则:只使用空格,每次缩进 2 或 4个空格。
使用空格缩进,不要在代码中使用制表符,应该设置编辑器将制表符转为空格。