《高质量C++/C编程指南》读书笔记--week 1
前言里先讲述了作者作为一个累计编写了数十万行C++/C代码以及开发了许多与科研有关的软件(集成电路CAD和3D图形学领域)的编程老手,却因为编程风格不好,质量不佳而屡次受挫的故事,然后引出了本书的写作意图:从每一个细微的细节上规范代码的书写,改正长期所用的隐含错误的方式编程,提高代码的质量与水平。
此次所读的是前五个章节。
第一章:文件结构
头文件的格式与管理。
1.1版权和版权声明:版权和版本的声明应位于头文件和定义文件的开头。
1.2头文件结构:使用indef/define/endif结构预处理块来防止头文件被重复引用。引用头文件时,用#include<…>格式来引用标准库文件,用#include“”格式来引用非标准库头文件。头文件中只存放“声明”不存放“定义”。尽量避免使用全局变量。
1.3 目录里结构:如果一个软件的头文件数目比较多或者为了加强信息隐藏,通常将头文件和定义文件保存于不同的目录中,以便于维护。
第二章:程序的版式
优美的程序的版式能增强程序的可读性。
2.1空行:每个类的声明,函数的定义,逻辑上不密切相关的语句之间都应该加上空行。
2.2代码行:一行代码只用来做一件事,如定义变量或写一条语句且定义变量时尽可能同时初始化赋值。If,for,while,do等语句独占一行且执行语句得换一行写,{}不可缺少。
2.3代码行的空格:关键字如const,virtual,inline,case等后面至少要一个空格,如if,for,while等关键字之后应该留一个空格后再加括号,但函数名与括号之间则不需要空格。一般一元操作符前后无空格但是二元操作符前后需要加空格,“,”与“;”则是前不加空格后加空格。
2.4对齐:“{”与“}”应独占一行且左对齐且在其中的代码在左括号缩进数格后左对齐。
2.5长行拆分:代码行的长度应该控制在70到80个字符内,如果不得已过长则需要拆分,拆出的新行需要进行适当缩进,使排版整齐。
2.6修饰符位置:如*和&应该紧跟着操作数。
2.7注释:注释要正确简洁明了,边写代码边加注释,不能滥用,尽量不使用缩写,一般加在代码行上方或者右方,不加在下方。当代码比较长特别是有多重嵌套时,应该在一些段落的结束处加注释,便于阅读。
2.8 类的版式:将public类型的函数写在前面,private类型的函数写在后面,以行为为中心。
第三章:标识符命名规则
好的标识符能让人更易理解变量与函数的功能及作用范围。
3.1共性规则:标识符应当直观可读,望文知意,长度应当适当,变量的标识符一般为名词形容词+名词,全局函数的标识符一般为动词或者动词+形容词。标识符与操作系统的开发风格保持一致,不要出现仅靠大小写区分的相似标识符,尽量避免在标识符中出现数字编号。
3.2简单的Windows应用程序命名规则:类名和函数名用大写字母开头的单词组成,变量和参数用小写字母开头的单词组合而成,常量全用大写的字母,用下划线分割单词,静态变量前缀加s_,全局变量则为g_,类的数据成员加前缀m_。
第四章:表达式和基本语句
严谨的表达式能减少出错几率。
4.1复合表达式:不要写太复杂的复合表达式,最好分行写。且最好一个表达式进行一个操作,尽量避免嵌套。
4.2 if语句:用bool变量作为判断条件时,应写为if(flag)与if(!flag),不可直接与TRUE,FALSE,-1,0进行比较,而指针变量则不能用bool变量的方法比较,只能用“==”或“!=”与NULL比较,浮点变量不能用“==”或“!=”与任何数字进行比较,应转化为差值与允许的误差的比较。
4.3 循环语句:一般将短的循环放在外面,长的循环放在里面,可以减少CPU跨切循环层的次数,且宜将逻辑判断语句移到循环语句外面,同时在循环语句内部不可修改循环变量,防止循环语句失去控制。循环变量的选取尽量采用半开半闭区间,方便了解循环进行的次数。
4.4 Switch 语句:每个case的结尾不能忘加break以及default。
4.5 goto语句:慎用少用。
第五章:常量
5.1 常量用途:尽量用含义直观的常量来表示在程序中多次出现的数字或字符串。
5.2 const与#define的比较:const有数据类型而#define没有,缺少安全检查,只进行字符替换,容易出现意料不到的错误。因此在C++中用const代替#defne对常量的定义。
5.3常量定义规则:需要对外公开的常量定义在头文件中,不需要的定义在头文件头部,如果一常量与其他常量密切相关,应在定义中包含这种关系。对于类中的常量,不能在声明的同时初始化它。

浙公网安备 33010602011771号