前言
这本书是林锐博士写的关于C/C++编程规范的一本书,我打算写下一系列读书笔记,当然我并不打算全盘接收这本书中的内容。
良好的编程习惯,规范的编程风格可以提高代码的正确性、健壮性、可靠性、效率、易用性、可读性、可扩展性、可复用性、兼容性、可移植性。
能够长期稳定地编写高质量程序的程序员称为编程老手;
能够长期稳定地编写出高难度、高质量的程序员称为编程高手。
写不出好的代码,只能说是自己内功修炼不到位,而不是用所谓真正的程序员如何如何做借口。
一、文件结构
我们理应在头文件和定义文件的开头进行版权和版本的说明。这里应该具备的内容有:版权信息(毕竟不管代码多少优劣都是我们的劳动成果,有必要说明它可以用于哪些场景)、作者以及当前版本号。书中还有文件名称、标识符、摘要等,我认为这些不是必要的,可以根据自身需求取舍。就比如版本号这些的,实际上有是有gitee、github这类的代码托管平台比自己在代码内写上版本号更有用。
为了避免头文件被重复引用,我们应该加上#pragma once;
#include <filename.h>被用来引用标准库的头文件,#include "filename.h"被用来引用非标准库的头文件;
头文件中应该只放声明,而不存放定义;
尽量避免使用全局变量。
如果一个软件的头文件数目比较多,通常应将头文件和定义文件分别保存于不同的目录,以便维护。如果有些头文件是私有的,他不会被用户的程序直接引用,则没有必要为其进行“声明”。为了加强信息的隐秘性,这些私有的头文件可以和定义文件放在同一个目录下。
二、程序的板式
板式并不影响程序的功能,但是影响程序的可读性。所以我们应该追求清晰、美观的程序风格。
在每个函数定义结束之后要加上空行;
在一个函数内,存在紧密逻辑联系的语句之间不加空行,但是其他地方理应加上一行空行。
一行代码应该只做一件事情。书中甚至认为一行应该只定义一个变量,我认为这是不合理的,如果一些变量存在一定的关联性是可以定义在同一行的,视情况是否添加一些必要的注释就行了。
if、for、while、do等语句独占一行,执行语句不得紧跟其后。如果只有简单明了的一行语句可以不用加上{},但是其他情况下都应该加上{}。并且{应该抬行与if、for、while等对齐,而不能跟在后面,前端和java的一些代码风格是喜欢跟在后面的,这不是很合适;
{ 与 } 应该在同一列对齐,这样能够清楚的看到代码块;
在定义变量就应该进行初始化,以达到减少隐患的目的。
关键字之后要跟空格,函数名之后要紧跟(,以示关键字与函数的区别;
单目操作符应紧跟操作数,让人能够清晰的看见被操作对象;
, 与 ; 后面应该有空格,如果 ; 后没有其他语句则可以不用。
代码的行的长度最大应该不超过80个字符,当然没必要可以去数,要适当的对长代码行进行拆分,拆分式要将操作符放在新行只首,这样可以突出它们之间的逻辑关系。
修饰符*和&要紧靠变量名,防止引起一些不必要的误解。
如果代码本身就清晰,就没必要添加注释;
注释应当准确易懂;
应当在编程的同时编写注释;
注释应当在代码的上一行或代码行之后,而不能在代码的下一行。
在写类时,我们应该采用以行动为中心的设计思想,即将函数写在前面,数据写在后面,毕竟我们更关心的是它能干什么,而不是它有什么数据。而且本身数据成员的名字应该是见名知意的。