《高质量C/C++编程》读书笔记一
前言
这本书是林锐博士写的关于C/C++编程规范的一本书,我打算写下一系列读书笔记,当然我并不打算全盘接收这本书中的内容。
良好的编程习惯,规范的编程风格可以提高代码的正确性、健壮性、可靠性、效率、易用性、可读性、可扩展性、可复用性、兼容性、可移植性。
能够长期稳定地编写高质量程序的程序员称为编程老手;
能够长期稳定地编写出高难度、高质量的程序员称为编程高手。
写不出好的代码,只能说是自己内功修炼不到位,而不是用所谓真正的程序员如何如何做借口。
一、文件结构
我们理应在头文件和定义文件的开头进行版权和版本的说明。这里应该具备的内容有:版权信息(毕竟不管代码多少优劣都是我们的劳动成果,有必要说明它可以用于哪些场景)、作者以及当前版本号。书中还有文件名称、标识符、摘要等,我认为这些不是必要的,可以根据自身需求取舍。就比如版本号这些的,实际上有是有gitee、github这类的代码托管平台比自己在代码内写上版本号更有用。
为了避免头文件被重复引用,我们应该加上#pragma once;
#include <filename.h>被用来引用标准库的头文件,#include "filename.h"被用来引用非标准库的头文件;
头文件中应该只放声明,而不存放定义;
尽量避免使用全局变量。
如果一个软件的头文件数目比较多,通常应将头文件和定义文件分别保存于不同的目录,以便维护。如果有些头文件是私有的,他不会被用户的程序直接引用,则没有必要为其进行“声明”。为了加强信息的隐秘性,这些私有的头文件可以和定义文件放在同一个目录下。
二、程序的板式
板式并不影响程序的功能,但是影响程序的可读性。所以我们应该追求清晰、美观的程序风格。
在每个函数定义结束之后要加上空行;
在一个函数内,存在紧密逻辑联系的语句之间不加空行,但是其他地方理应加上一行空行。
一行代码应该只做一件事情。书中甚至认为一行应该只定义一个变量,我认为这是不合理的,如果一些变量存在一定的关联性是可以定义在同一行的,视情况是否添加一些必要的注释就行了。
if、for、while、do等语句独占一行,执行语句不得紧跟其后。如果只有简单明了的一行语句可以不用加上{},但是其他情况下都应该加上{}。并且{应该抬行与if、for、while等对齐,而不能跟在后面,前端和java的一些代码风格是喜欢跟在后面的,这不是很合适;
{ 与 } 应该在同一列对齐,这样能够清楚的看到代码块;
在定义变量就应该进行初始化,以达到减少隐患的目的。
关键字之后要跟空格,函数名之后要紧跟(,以示关键字与函数的区别;
单目操作符应紧跟操作数,让人能够清晰的看见被操作对象;
, 与 ; 后面应该有空格,如果 ; 后没有其他语句则可以不用。
代码的行的长度最大应该不超过80个字符,当然没必要可以去数,要适当的对长代码行进行拆分,拆分式要将操作符放在新行只首,这样可以突出它们之间的逻辑关系。
修饰符*和&要紧靠变量名,防止引起一些不必要的误解。
如果代码本身就清晰,就没必要添加注释;
注释应当准确易懂;
应当在编程的同时编写注释;
注释应当在代码的上一行或代码行之后,而不能在代码的下一行。
在写类时,我们应该采用以行动为中心的设计思想,即将函数写在前面,数据写在后面,毕竟我们更关心的是它能干什么,而不是它有什么数据。而且本身数据成员的名字应该是见名知意的。
相关文章:
《高质量C/C++编程》读书笔记一
前言 这本书是林锐博士写的关于C/C编程规范的一本书,我打算写下一系列读书笔记,当然我并不打算全盘接收这本书中的内容。 良好的编程习惯,规范的编程风格可以提高代码的正确性、健壮性、可靠性、效率、易用性、可读性、可扩展性、可复用性…...
【完美解决】python flask如何直接加载html,css,js,image等下载的网页模板
python flask如何直接加载下载的网页模板问题解决办法问题 本人网页开发小白,刚学了用flask,下载了一套网页模板,启动一个网页的确很简单,但是发现无论怎么改这里的 static_folder值都无法找到CSS,JS,IMAGE,FONT等资源 app Flas…...
2023美赛C题【分析思路+代码】
以下内容为我个人的想法与实现,不代表任何其他人。 文章目录问题一数据预处理时间序列模型创建预测区间单词的任何属性是否影响报告的百分比?如果是,如何影响?如果不是,为什么不是?问题二问题三难度评估模型…...
考研复试6 编译原理
第一章 编译器简介 1. 编译器的核心功能 把源代码翻译成目标代码 2. 编译器设计两个原则: 语义相同;以某种可察觉的方式改进输入程序 3. 编译器内部结构 前端:依赖于源语言,与目标机器无关。将输入的代码映射到 IR。包括分析部…...
uni-app:登录与支付--用户信息
用户信息 实现用户头像昵称区域的基本布局 在 my-userinfo 组件中,定义如下的 UI 结构: <template><view class"my-userinfo-container"><!-- 头像昵称区域 --><view class"top-box"><image src"…...
Docker 部署 MySQL
1. 进入下面路径下 -v 使用相对路径的方式挂载的目录docker会自动创建,路径为:/var/lib/docker/volumes/ cd /var/lib/docker/volumes/ 2. 指定版本5.7启动容器mysql docker run -p 3316:3306 --name mysql-master \ -v mysql-master-log:/var/log/mys…...
警惕,3月20日WOS目录更新,50本SCI/SSCI被剔除,这个出版社多达18本
2023年3月SCI、SSCI期刊目录更新 2023年3月20日,Web of Science核心期刊目录再次更新!此次2023年3月SCIE & SSCI期刊目录更新,与上次更新(2023年2月)相比,共有50本期刊被剔除出SCIE & SSCI期刊目录…...
【 Linux入门 】之 手搓 命令行解释器 bash(带源码)
目的基本结构提取输入命令fgets的使用命令初步处理命令的本质创建子进程重要知识补充进程替换命令处理简单 bash 完成及演示优化bashls颜色输出颜色实现cd命令ecport 命令envecho $echo $?目的 主要目的在于进一步了解 Linux 系统下使用进程相关的系统调用 及 shel…...
【运维】运维常用命令
shell大全读取文件每一行内容文件是否存在数组定义和循环取值变量循环流程控制语句:case判断数值相等/大于/小于判断字符串相等awk求和、平均、最大、最小sed用法exprbc计算器读取文件每一行内容 while read line doecho $line done < a.txt文件是否存在 if [ …...
MYSQL常用命令大全
文章目录 基本语句链接数据库显示已有数据库创建数据库选择数据库显示数据库中的表显示当前数据库的版本信息,链接用户名删除数据库创建表表 增加将查询结果插入到新表中:表 删除表 修改表 查询in子查询between ~ and ~ 模糊查询模糊查询regexp中的OR:多个信息查询同义词:删…...
锚点定位方案
一 背景知识: 1.1 #号的作用 #代表网页中的一个位置。其右面的字符,就是该位置的标识符。比如,http://www.example.com/index.html#print 就代表网页index.html的print位置。浏览器读取这个URL后,会自动将print位置滚动至可视区域。 为网页…...
Flink学习--第一章 初识Flink
Flink是Apache基金会旗下的一个开源大数据处理框架,如今已被很多人认为是大数据实时处理的方向和未来,许多公司也都在招聘和储备掌握Flink技术的人才。 1.1 Flink的源起和设计理念 Flink起源于一个叫作Stratosphere的项目,它是由3所地处柏林的…...
电脑技巧:常见的浏览器内核介绍
浏览器是大家日常使用电脑必备的软件,网上查资料、听音乐、办公等等,都不离不开浏览器给我们提供的方便,今天小编来给大家介绍一下常见的浏览器内核,一起来学习一下吧!1、Chromium 内核Google Chrom内核:统…...
【数据分析之道①】字符串
文章目录专栏导读1、字符串介绍2、访问字符串中的值3、字符串拼接4、转义字符5、字符串运算符6、字符串格式化7、字符串内置函数专栏导读 ✍ 作者简介:i阿极,CSDN Python领域新星创作者,专注于分享python领域知识。 ✍ 本文录入于《数据分析之…...
网络安全之防火墙
目录 网络安全之防火墙 路由交换终归结底是联通新设备 防御对象: 定义: 防火墙的区域划分: 包过滤防火墙 --- 访问控制列表技术 --- 三层技术 代理防火墙 --- 中间人技术 --- 应用层 状态防火墙 --- 会话追踪技术 --- 三层、四层 UTM …...
STM32之点亮一个LED小灯(轮询法)
目录 一、初始化GPIO口 二、按键点亮LED灯(轮询法) 一、初始化GPIO口 1、点亮LED小灯前,需要先初始化GPIO口 HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init) GPIO_TypeDef *GPIOx: //指初始化GPIO…...
pandas读CSV、读JSON、Excel
学习让我快乐 pandas的数据读取基本操作 pandas是Python中非常流行的数据处理库,它提供了许多强大的工具来读取、处理和分析数据。在本文中,我们将介绍pandas中的一些基本数据读取操作。 读取CSV文件 CSV文件是最常见的数据文件格式之一,p…...
企业站项目
企业站项目 一、项目实现结果 该项目共分为七大类:头部区域(logo图片、输入框)、导航区域、轮播图区域、内容区域、市场项目区域、产品中心区域、尾部区域 如图所示: http://企业站项目源码http://xn--vhquvo17e18gllbz7h2v9d …...
STM32开发(九)STM32F103 通信 —— I2C通信编程详解
文章目录一、基础知识点二、开发环境三、STM32CubeMX相关配置四、Vscode代码讲解GPIO模拟I2C代码SHT30相关代码main函数中循环代码五、结果演示方式一、示波器分析I2C数据方式2、通过Modbus将获取到的数据传到PC上一、基础知识点 本实验通过I2C通信获取SHT30温湿度值ÿ…...
手撕数据结构—栈
Tips不得不再次提一下这个语法问题,当数组创建的时候,进行初始化的时候,分为全部初始化或者说部分初始化,对于不完全初始化而言,剩下的部分就全部默认为零。现在比如说你想对整型数组的1万个元素把它全部变成-1&#x…...
MySQL--Day02
约束 约束是作用于表中字段上的规则,用于限制存储在表中的数据 为了保证数据库中数据的正确性、有效性、完整性非空约束 NOT NULL唯一约束 UNIQUE主键约束 PRIMARY KEY默认约束 DEFAULT检查约束 CHECK CREATE TABLE user(id int primary key auto_increm…...
Phi-4-mini-reasoning在LSTM时间序列预测中的应用与优化
Phi-4-mini-reasoning在LSTM时间序列预测中的应用与优化 1. 当传统预测遇上智能推理 时间序列预测一直是数据分析领域的经典难题。无论是股票价格波动还是商品销量变化,传统的LSTM模型虽然能捕捉时间依赖关系,但面对突发新闻事件或政策变化时ÿ…...
用STM32F103C8T6做个宠物喂食器:从电路图到代码的保姆级DIY教程
用STM32F103C8T6打造智能宠物喂食器:从硬件搭建到软件调优全流程解析 养宠物的朋友都知道,定时定量喂食对宠物健康至关重要。今天我们就来手把手教你如何用STM32F103C8T6单片机打造一个智能宠物喂食器,不仅能定时投喂,还能识别不…...
ThingsBoard生产环境部署选型指南:安装包 vs 源码,内存队列 vs RabbitMQ,如何根据项目规模做选择?
ThingsBoard生产环境部署架构选型实战指南 当技术团队准备将ThingsBoard投入实际生产环境时,面临的第一个关键决策往往不是"如何安装",而是"以什么架构安装"。这个选择将直接影响未来三年的系统稳定性、扩展性和运维成本。作为经历过…...
新型macOS Infinity窃密木马利用Nuitka Python载荷与ClickFix传播
首例针对macOS的ClickFix攻击活动Malwarebytes研究人员发现名为Infinity Stealer的新型macOS信息窃取木马,该木马使用Nuitka编译的Python载荷,通过伪造Cloudflare验证页面诱骗用户执行终端命令进行传播。据Malwarebytes报告指出,这是首次观察…...
Shadow Sound Hunter模型部署:Windows 11环境配置指南
Shadow & Sound Hunter模型部署:Windows 11环境配置指南 本文详细介绍了在Windows 11系统上部署Shadow & Sound Hunter模型的完整流程,包括系统要求、依赖安装、环境配置等关键步骤,帮助Windows用户快速上手。 1. 环境准备与系统要求…...
【Python内存管理黄金法则】:20年SRE亲授生产环境OOM崩溃前的5个关键干预点
第一章:Python智能体内存管理策略的底层认知与生产意义Python智能体(如基于LLM的Agent系统)在长时间运行、多轮对话与状态缓存场景下,内存行为远超传统脚本应用。其内存压力不仅来自模型权重加载,更源于动态生成的中间…...
Alpamayo-R1-10B参数详解:Top-p=0.98与Temperature=0.6组合的工程意义解析
Alpamayo-R1-10B参数详解:Top-p0.98与Temperature0.6组合的工程意义解析 1. 项目背景与技术架构 1.1 Alpamayo-R1-10B核心定位 Alpamayo-R1-10B是NVIDIA开发的自动驾驶专用视觉-语言-动作(VLA)模型,其核心设计目标是通过类人因果推理能力提升自动驾驶…...
Tencent Hunyuan3D-1.0学术合作机会:腾讯混元团队的研究方向与合作模式
Tencent Hunyuan3D-1.0学术合作机会:腾讯混元团队的研究方向与合作模式 【免费下载链接】Hunyuan3D-1 腾讯开源的Hunyuan3D-1项目,创新提出两阶段3D生成方法,实现快速、高质量的文本到3D和图像到3D转换,融合Hunyuan-DiT模型&#…...
从‘发快递’到‘收快递’:手把手拆解RocketMQ 5.x中Producer Group的变迁与最佳实践
从‘发快递’到‘收快递’:手把手拆解RocketMQ 5.x中Producer Group的变迁与最佳实践 在消息中间件的世界里,RocketMQ一直以其高吞吐、低延迟的特性占据着重要地位。随着5.x版本的发布,一个看似微小的改动——生产者匿名化,却在实…...
