前言
这本书是林锐博士写的关于C/C++编程规范的一本书,我打算写下一系列读书笔记,当然我并不打算全盘接收这本书中的内容。
良好的编程习惯,规范的编程风格可以提高代码的正确性、健壮性、可靠性、效率、易用性、可读性、可扩展性、可复用性、兼容性、可移植性。
能够长期稳定地编写高质量程序的程序员称为编程老手;
能够长期稳定地编写出高难度、高质量的程序员称为编程高手。
写不出好的代码,只能说是自己内功修炼不到位,而不是用所谓真正的程序员如何如何做借口
三、命名规则
标识符应当见名知意;
标识符的长度要适中,单字符名应该仅作为函数中的局部变量使用;
大小写命名法和小写加下划线命名法分别是Windows和Unix操作系统所提倡的命名方法,这两种不应该混淆,用大小写就都用大小写,用小写加下划线就都用小写加下划线;
不能把大小写作为区分标识符的条件;
要避免全局变量与局部变量同名;
变量名应当采用“形容词+名词”的方式取名,让人能够直观的知道它是什么样的变量。函数名应当采用“动词+名词”或“动词”的方式命名,这能够是我们直观的知道这个函数是干嘛的;
具有相反意义的函数或变量要使用正确的正反义词来命名;
名字中要尽量避免出现数字编号;
类名和函数名要使用大写开头的单词组成,变量和参数用小写字母开头的单词,常量使用全大写。静态变量前可以加上s_来说明这是一个静态变量,同理全局变量也可以加上g_;
类的成员变量我们往往会加上_或者m_,这样可以有效地 避免数据成员与成员函数的参数同名;
四、表达式和基本语句
如果在一行代码中有多个运算符,应该使用()来明确表明他们的作用范围,而不应该使用默认的优先级来表明他们的执行顺序,不要为难自己也不要为难别人;
复合表达式不要写的太复杂,一些地方该拆分就拆分,复合语句又不会提高多少运行效率,与其增加那么点点的效率,还不如保证可读性;
if语句
不能将bool变量直接与TRUE、FALSE或者1、0进行比较;
整型变量应当用“==”或“!=”直接比较,而不能像布尔变量一样使用;
浮点变量不能用“==”或“!=”与任何数字比较;
指针变量应当与NULL比较,而不应该去与0进行比较;
如果判等的语句有一个是常量可以将常量写在前面,这样能有效的避免将等于写成赋值;
循环语句
在多层嵌套的语句中,应当尽可能的将循环次数多的循环嵌套的内层,这样可以减少CPU跨切循环层的次数;
不能在for循环内修改变量,防止for循环失去控制;
switch语句中每一个case后面都应该跟上一个break,除非你有特殊的需要,最后不管default是否需要,都应加上;
goto语句非常容易打乱结构,应当少用慎用,而不是禁用,至少在跳出多层循环这一方面,goto的优越性是不可否认的。
五、常量
C语言中用#define来定义常量(称为宏常量),在C++中const也可以用来定义常量(称为const常量);
常量的使用是为了提高代码的可读性,一个突兀的数字永远没有一个词组更具有意义;
const 常量有数据类型,而宏常量没有数据类型,所以能够使用const常量的地方就不要使用宏常量
需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义文件的头部。
如果常量之间存在某种关系,那么就应该通过这种关系来建立常量,不是每个常量都使用一个孤立的数字来表示。
const 数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同的对象其 const 数据成员的值可以不同。
如果需要在类中建立一个恒定的常量,应该使用枚举常量来实现。