《高质量C/C++编程》读书笔记一
迪丽瓦拉
2025-05-29 06:58:58
0

前言

  这本书是林锐博士写的关于C/C++编程规范的一本书,我打算写下一系列读书笔记,当然我并不打算全盘接收这本书中的内容。
  良好的编程习惯,规范的编程风格可以提高代码的正确性、健壮性、可靠性、效率、易用性、可读性、可扩展性、可复用性、兼容性、可移植性。
  能够长期稳定地编写高质量程序的程序员称为编程老手;
  能够长期稳定地编写出高难度、高质量的程序员称为编程高手。
  写不出好的代码,只能说是自己内功修炼不到位,而不是用所谓真正的程序员如何如何做借口。

一、文件结构

  我们理应在头文件和定义文件的开头进行版权和版本的说明。这里应该具备的内容有:版权信息(毕竟不管代码多少优劣都是我们的劳动成果,有必要说明它可以用于哪些场景)、作者以及当前版本号。书中还有文件名称、标识符、摘要等,我认为这些不是必要的,可以根据自身需求取舍。就比如版本号这些的,实际上有是有gitee、github这类的代码托管平台比自己在代码内写上版本号更有用。

  为了避免头文件被重复引用,我们应该加上#pragma once;
  #include 被用来引用标准库的头文件,#include "filename.h"被用来引用非标准库的头文件;
  头文件中应该只放声明,而不存放定义;
  尽量避免使用全局变量。

  如果一个软件的头文件数目比较多,通常应将头文件和定义文件分别保存于不同的目录,以便维护。如果有些头文件是私有的,他不会被用户的程序直接引用,则没有必要为其进行“声明”。为了加强信息的隐秘性,这些私有的头文件可以和定义文件放在同一个目录下。

二、程序的板式

  板式并不影响程序的功能,但是影响程序的可读性。所以我们应该追求清晰、美观的程序风格。

  在每个函数定义结束之后要加上空行;
  在一个函数内,存在紧密逻辑联系的语句之间不加空行,但是其他地方理应加上一行空行。

  一行代码应该只做一件事情。书中甚至认为一行应该只定义一个变量,我认为这是不合理的,如果一些变量存在一定的关联性是可以定义在同一行的,视情况是否添加一些必要的注释就行了。
  if、for、while、do等语句独占一行,执行语句不得紧跟其后。如果只有简单明了的一行语句可以不用加上{},但是其他情况下都应该加上{}。并且{应该抬行与if、for、while等对齐,而不能跟在后面,前端和java的一些代码风格是喜欢跟在后面的,这不是很合适;
   { 与 } 应该在同一列对齐,这样能够清楚的看到代码块;
  在定义变量就应该进行初始化,以达到减少隐患的目的。

  关键字之后要跟空格,函数名之后要紧跟(,以示关键字与函数的区别;
  单目操作符应紧跟操作数,让人能够清晰的看见被操作对象;
   , 与 ; 后面应该有空格,如果 ; 后没有其他语句则可以不用。

  代码的行的长度最大应该不超过80个字符,当然没必要可以去数,要适当的对长代码行进行拆分,拆分式要将操作符放在新行只首,这样可以突出它们之间的逻辑关系。

  修饰符*和&要紧靠变量名,防止引起一些不必要的误解。

  如果代码本身就清晰,就没必要添加注释;
  注释应当准确易懂;
  应当在编程的同时编写注释;
  注释应当在代码的上一行或代码行之后,而不能在代码的下一行。

  在写类时,我们应该采用以行动为中心的设计思想,即将函数写在前面,数据写在后面,毕竟我们更关心的是它能干什么,而不是它有什么数据。而且本身数据成员的名字应该是见名知意的。

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...