本文只是本人的阅读笔记,作笔记时有改动。详细指南请参见链接:原指南
0 前言
编辑高手:能长期稳定地编写出高难度、高质量程序的程序员。
编程老手:能长期稳定地编写出高质量程序的程序员。
根据上述定义,马上得到第一推论:我既不是高手也算不上是老手。
1.1 版本和版本的声明
(1)版权信息。
(2)文件名称,标识符,摘要。
(3)当前版本号,作者/修改者,完成日期。
(4)版本历史信息。
例子见原文示例1-1。
1.2 头文件的结构
(1)头文件开头处的版权和版本声明(参见原文示例1-1)。
(2)预处理块。
(3)函数和类结构声明等。
【预处理块中的“ifndef/define/endif结构”是本人忽视的,只有在写大作业时才注意。】
#ifndef FILE_H
#define FILE_H
//内容
#endif
【不提倡使用全局变量,尽量不要在头文件中出现象extern int value 这类声明】
1.3 定义文件的结构
(1) 定义文件开头处的版权和版本声明(参见示例1-1)。
(2) 对一些头文件的引用。
(3) 程序的实现体(包括数据和代码)。
1.4 头文件的作用
【略】
1.5 目录结构
【略,不清楚】
2.1 空行
空行不会浪费内存,虽然打印含有空行的程序是会多消耗一些纸张,但是值得。
(1)在每个类声明之后、每个函数定义结束之后都要加空行。
(2)在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。
2.2 代码行
(1)一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且方便于写注释。
【本人有时会在一行连续定义相同类型的变量,这样不好!】
(2)if、for、while、do等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加{}。
【本人不注意,喜欢写紧凑点,不知道是哪里看的,{要跟在后面,现在还是采用本文的建议把,让{也占一行,一个语句也加{}】
(3)尽可能在定义变量的同时初始化该变量(就近原则),减少隐患。
2.3 代码行内的空格
【代码行内的空格都是本人不注意的!】
(1)关键字之后要留空格。象const、virtual、inline、case 等关键字之后至少要留一个空格,否则无法辨析关键字。象if、for、while等关键字之后应留一个空格再跟左括号‘(’,以突出关键字。
(2)函数名之后不要留空格,紧跟左括号‘(’,以与关键字区别。
(3)向后跟随: (
(4)向前紧随: ) , ;
(5),之后要留空格,如Function(x, y, z)。
;类似如for (initialization; condition; update)。
(6)赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=”、“>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”等二元操作符的前后应当加空格。
(7)一元操作符的前后如“!”、“~”、“++”、“–”、“&”(地址运算符)等不加空格。
(8)“[]”、“.”、“->”这类操作符前后不加空格。
(9)对于表达式比较长的for语句和if语句,为了紧凑起见可以适当地去掉一些空格,如for (i=0; i<10; i++)和if ((a<=b) && (c<=d))。
2.4 对齐
【这主要关于 { 与 } 的,但我之前都没有注意】
(1){与}独占一行,位于同列,注意缩进。
(2){ }内的代码块在{ 的右边数格对齐。
2.5 长行拆分
长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。
2.6 修饰符的位置
修饰符 * 和 & 应该靠近数据类型还是该靠近变量名,是个有争议的活题。
若将修饰符 * 靠近数据类型,例如:int* x; 从语义上比较直观,即x是int 类型的指针。
弊端是易误解,例如:int* x, y; 此处y容易被误解为指针变量。虽然将x和y分行定义可以避免误解,但并不是人人都愿意这样做。
2.7 注释
(1)注释是对代码的“提示”,而不是文档。程序中的注释不可喧宾夺主,注释太多了会让人眼花缭乱。注释的花样要少。
(2)边写代码边注释,修改代码同时修改相应的注释。
(3)【尽量避免在注释中使用缩写,特别是不常用缩写?】
(4)注释位置不可放在下方。
(5)【代码比较长,特别是有多重嵌套时,应当在一些段落的结束处加注释,便于阅读。这个从来没注意哈】
2.7 类的版式
建议读者“以行为为中心”的书写方式,首先考虑类的函数。这是很多人的经验——“这样做不仅让自己在设计类时思路清晰,而且方便别人阅读。因为用户最关心的是接口,谁愿意先看到一堆私有数据成员!”