《高质量C++编程指南》读书笔记(一)

C++的全链路追踪方案(稍微有点高端) 背景:本人主要在做C++ SDK的开发,需要给到业务端去集成,在集成的过程中可能会出现某些功能性bug,即没有得到想要的结果。那怎么调试? 分析:这种问题其实调试起来稍微有点困难,它不像crash,当发生crash时还能拿到堆栈信息去分析,然而功能性bug没有crash,也就没法捕捉对应到当时的堆栈信息。因为不是在本地,也没法用编译器debug。那思路就剩log了,一种方式是考虑在SDK内部的关键路径下打印详细的log,当出现问题时拿到log去分析。然而总有漏的时候,谁能保证log一定打的很全面,很有可能 阅读详情

《高质量C++编程指南》是一本关于C++编程风格的指导、建议性的书,诞生已经有一年多了,初学C++,阅读此书,感觉甚好,收获很大。这本书对初学者掌握好的编码习惯有极大的帮助,对老手改进编码方式也有好处。

 

这里把读书笔记拿出来共享,希望对大家有帮助。

本书共11章,另前言以及参考文献,附录A,B,C建议按照原作者的意见,按照先前言,再附录,再正文的顺序阅读。

 

 

头文件:

为了防止头文件被重复引用,应当用ifndef/define/endif 结构产生预处理块。

用#include <filename.h> 格式来引用标准库的头文件(编译器从标准库目录开始搜索)。

用#include “filename.h” 格式来引用非标准库的头文件(编译器从用户的工作目录开始搜索)。

头文件中只存放“声明”而不存放“定义” 。

 

代码行:

在每个类声明之后、每个函数定义结束之后都要加空行。

在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。

一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且方便于写注释。

if、for、while、do 等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加{}。

尽可能在定义变量的同时初始化该变量(就近原则)。

 

空格:

关键字之后要留空格。

函数名之后不要留空格,紧跟左括号‘(’,以与关键字区别。

‘(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。

‘,’之后要留空格,如Function(x, y, z)。如果‘;’不是一行的结束符号,其后要留空格,如for (initialization; condition; update)。

二元操作符的前后应当加空格。一元操作符前后不加空格。

象“[]”、“.”、“->”这类操作符前后不加空格。

 

对齐:

程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。

{ }之内的代码块在‘{’右边数格处左对齐。

 

长行拆分:

代码行最大长度宜控制在70 至80 个字符以内。

长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。

 

修饰符的位置:

应当将修饰符* 和& 紧靠变量名。

 

注释:

注释是对代码的“提示”,不是文档。不可喧宾夺主,太多了会让人眼花缭乱。花样要少。

边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。

注释应当准确、易懂,防止注释有二义性。

尽量避免在注释中使用缩写,特别是不常用缩写。

注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不可放在下方。

当代码比较长,特别是有多重嵌套时,应当在一些段落的结束处加注释,便于阅读。

 

命名规则:

标识符应当直观且可以拼读,可望文知意,不必进行“解码”。最好采用英文单词或其组合,切忌使用汉语拼音来命名。

识符的长度应当符合“min-length && max-information”原则。

命名规则尽量与所采用的操作系统或开发工具的风格保持一致。

程序中不要出现仅靠大小写区分的相似的标识符。

程序中不要出现标识符完全相同的局部变量和全局变量,会使人误解。

变量的名字应当使用“名词”或者“形容词+名词”。

全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组)。

类的成员函数应当只使用“动词”,被省略掉的名词就是对象本身。

用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。

尽量避免名字中出现数字编号,除非逻辑上的确需要编号。

 

简单的Windows应用程序命名规则:

类名和函数名用大写字母开头的单词组合而成。

变量和参数用小写字母开头的单词组合而成。

常量全用大写的字母,用下划线分割单词。

静态变量加前缀s_(表示static)。

如果不得已需要全局变量,则使全局变量加前缀g_(表示global)

类的数据成员加前缀m_(表示member),这样可以避免数据成员与成员函数的参数同名。

为了防止某一软件库中的一些标识符和其它软件库中的冲突,可以为各种标识符加上能反映软件性质的前缀。

 

表达式和基本语句:

如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默认的优先级。

不要编写太复杂的复合表达式。

不要有多用途的复合表达式。

不要把程序中的复合表达式与“真正的数学表达式”混淆。

不可将布尔变量直接与TRUE、FALSE 或者1、0 进行比较。

应当将整型变量用“==”或“!=”直接与0 比较。

不可将浮点变量用“==”或“!=”与任何数字比较。

应当将指针变量用“==”或“!=”与NULL 比较。

不可在for 循环体内修改循环变量,防止for 循环失去控制。

每个case 语句的结尾不要忘了加break,否则将导致多个分支重叠(除非有意使多个分支重叠)。

不要忘记最后那个default 分支。即使程序真的不需要default 处理,也应该保留。

 

常量:

在C++ 程序中只使用const 常量而不使用宏常量(#define)。

需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义文件的头部。

如果某一常量与其它常量密切相关,应在定义中包含这种关系,而不应给出一些孤立的值。

 

函数设计:

参数的书写要完整,如果函数没有参数,则用void 填充。

如果参数是指针,且仅作输入用,则应在类型前加const,以防止该指针在函数体内被意外修改。

如果输入参数以值传递的方式传递对象,则宜改用“const &”方式来传递,这样可以省去临时对象的构造和析构过程,从而提高效率。

避免函数有太多的参数,参数个数尽量控制在5 个以内。

不要省略返回值的类型。

函数名字与返回值类型在语义上不可冲突。

不要将正常值和错误标志混在一起返回。正常值用输出参数获得,而错误标志用return 语句返回。

有时候函数原本不需要返回值,但为了增加灵活性如支持链式表达,可以附加返回值。

在函数体的“入口处”,对参数的有效性进行检查。

在函数体的“出口处”,对return 语句的正确性和效率进行检查。

(1)return 语句不可返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁。

(2)要搞清楚返回的究竟是“值”、“指针”还是“引用”

(3)如果函数返回值是一个对象,要考虑return 语句的效率。

函数的功能要单一,不要设计多用途的函数。

函数体的规模要小,尽量控制在50 行代码之内。

尽量避免函数带有“记忆”功能。相同的输入应当产生相同的输出。

用于出错处理的返回值一定要清楚,让使用者不容易忽视或误解错误情况。

 

 

windows环境下搭建skywalking进行链路追踪 1. 下载skywalking(下载地址:Downloads | Apache SkyWalking) 2. 解压到自己想存放的文件夹下 3.进入到skywalking的webapp目录下,编辑webapp.yml,修改端口号,端口号默认为8080 4.添加gateway微服务模块支持 在skywalking的agent目录下打开optional-plugins目录,找到apm-spring-cloud-gateway-2.1.x-plugin-8.7.0.jar包,复制到plugin... 阅读详情

相关推荐

《高质量C++/C编程指南》读书笔记与实践

函数指针是指向函数的指针变量,它保存了一个函数的地址。使用函数指针可以在运行时选择要执行的函数,提供了额外的灵活性和动态性。// 声明一个指向函数的指针,并初始化为function的地址funcPtr();// 通过函数指针调用functionreturn 0;在这个例子中,我们定义了一个名为function的普通函数,然后声明了一个函数指针funcPtr,将function的地址赋值给该函数指针。通过函数指针调用函数就像是直接调用函数一样。

weixin_42611177的博客 986

C++实现路由追踪(Tracert)程序

目录 ICMP协议介绍 Tracert实现原理 代码部分 测试结果 ICMP协议介绍 ICMP是internet控制报文协议,它是TCP/IP协议族的一个子协议,用于IP主机、路由器之间传递控制消息。ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对...

我的书包哪里去了 8286

认知网络分析实战:用Python复现课堂对话研究(含LSA代码)

本文通过Python实战,详细演示了如何运用认知网络分析(ENA)和滞后序列分析(LSA)两种方法,对课堂对话数据进行深度挖掘。文章提供了从数据清洗、行为编码到网络构建、序列统计及可视化的完整代码流程,帮助教育研究者和数据分析师量化分析对话中的认知结构与动态互动模式,从而获得超越文本表面的研究洞见。

weixin_28559803的博客 155

高质量C/C++编程指南--读书笔记一 1、2章

第一章 文件结构 一、知识点 1、头文件编写规则:(P12) (1)、为了防止头文件被重复引用,应当用ifndef/ define/ endif 结构产生预处理块。 (2)、用#include <filename.h>格式引用标准库的头文件(编译器将从标准库目录开始搜索)。 (3)、用#include "filename.h"格式引用非标准库的头文件(编译器将从用户的...

weixin_30621919的博客 129

LangFuse部署与实践

LangFuse的原理主要是基于可观察性和分析技术来监控和优化低延迟消息(LLM)应用。它提供了一套完整的解决方案,通过收集、处理和分析LLM应用在运行过程中产生的各种数据,来生成实时的、深入的、可操作的见解。通过提供实时的、深入的见解和可视化的跟踪功能,LangFuse使得识别和解决应用性能问题变得更加简单和高效。总的来说,LangFuse的原理是通过综合运用可观察性和分析技术,来提供对LLM应用的全面监控和优化能力。这使得开发者和运维团队能够更加高效地管理和维护他们的应用,从而提升用户体验和业务效益。

pumpkin84514的博客 7945

ELK - CentOS7 安装 elasticsearch 7.17.5

elk elasticsearch 安装

qq_19783793的博客 1462

C++——《高质量C/C++编程》读书笔记

知错就改 温故而知新 坚持学习,天天向上 文章目录头文件.h中包含源文件.c/.cpp内容代码行类的版式命名规则表达式和基本语句运算符的优先级与零值比较的注意事项指针变量与零值比较常量const VS #define常量定义规则类中的常量函数设计参数的规则 声明:主要内容源自 林锐的《高质量C/C++编程》 头文件.h中包含 版权信息,文件名称,简述,当前版本号,作者/修改者,完成/修改日期,历史版本信息等 预处理块 函数和类结构声明 样例: /* * Copyright (c) 2020, tsuib

tsuibeyond的博客 1273

基于深度学习YOLOv10的人脸表情识别系统(附完整资源+PySide6界面+训练代码)

本文介绍了如何基于YOLOv10实现一个人脸表情识别系统。我们从数据集准备、模型训练到PySide6界面实现进行了详细的讲解。通过该系统,用户可以实时检测和分类人脸表情,为情感分析、智能交互等应用场景提供支持。

YOLO 1053

《高质量C++&C 编程指南》读书笔记

高质量C++/C 编程指南 作者:林锐   前言 一、编程老手与高手的误区 进度表 使用说明书 注释 流程图 参考手册 文档 用户更明白用户需要什么 团队开发的理念 第一次就正确运行 上午9:00 到下午5:00 之间工作   软件设计的基础知识   提高质量与生产率是软件工程要解决的核心问题   写函数strcpy 的代码: 这么一个小不点的函数,他从三

backard的专栏 495

微信小程序 - 完美解决“code“:“NO_AUTH“,“message“:“商户号该产品权限未开通,请前往商户平台>产品中心检查后重试“(微信小程序报错问题排查解决)

微信小程序NO_AUTH: 商户号该产品权限未开通,请前往商户平台>产品中心检查后重试?微信小程序提示商户号该产品权限未开通,请前往商户平台>产品中心检查后重试,微信小程序"code":"NO_AUTH"错误码怎么解决,报错信息如下:httpResponseBody[{"code":"NO_AUTH","message":"商户号该产品权限未开通,请前往商户平台>产品中心检查后重试"}],微信小程序支付问题,如何解决这个问题,虚拟支付商户号,虚拟支付商户号里面没有产品支付的页面,排查商户号没问题,商户号配置

🏆 前端领域优质创作者 4444

FLUENT 软件中design modeler网格划分后,导出失败:系统显示“在网格文件导出过程中出现异常。请将数据发送给您的技术支持供应商。”...如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1472

《高质量C++编程指南》笔记

《高质量C++编程指南》是一本关于C++编程风格的指导、建议性的书,诞生已经有一年多了,初学C++,阅读此书,感觉甚好,收获很大。这本书对初学者掌握好的编码习惯有极大的帮助,对老手改进编码方式也有好处。 XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />这里把读书笔记拿出来共享,希望对大家有帮

ylfeng86的专栏 570

Altium Designer(AD24/25)导出DXF或DWG结构文件的方法

DXF(Drawing Exchange Format)和DWG(Drawing)是两种常见的CAD(计算机辅助设计)文件格式,常用于结构和硬件之间的沟通。本文介绍Altium Designer(AD24/25)导出DXF或DWG结构文件的方法。

fydar的博客 2333

【读书笔记】《高质量C/C++编程指南》

文件结构、程序版式、命名规则、表达式与基本语句、常量、函数设计、内存管理、C++高级特性

phoenixFlyzzz的博客 2821

YOLOv5改进有效涨点目录 | 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制

Hello,各位读者们好本专栏自开设两个月以来已经更新改进教程60余篇其中包含C2f、主干、检测头、注意力机制、Neck多种结构上创新,也有损失函数和一些细节点上的创新。同时本人一些讲解视频和包含我所有创新的YOLOv8文档并不能在优快云上传(所有的创新点都经过我的测试是可用的,得到该文件之后大家可以随意组合使用),所以会建立群的形式在内上传我的文件和视频我也会在群内不定期和大家交流回答大家问题,同时定期会更新一些文章的创新点(经过我融合测试后的,先到先得)。本专栏持续更新网络上的所有前沿文章。

Snu77的博客 3万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

《高质量C++/C编程指南》读书笔记之一

《高质量C++/C编程指南》------作者林锐博士 作者在前言中所讲的关于编程老手与编程高手以及结合自己的经历,给我们讲述了关于编程质量的重要性以及必须对于其质量的重视。 1.知错就改。 2.经常温故而知新。 3.坚持学习,天天向上。 从这里面抽取精华,对其加以整理,形成自己的笔记,在后面的学习过程中可以加以巩固。 ——————————————————————————————————

hgj125073的专栏 1024

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

《高质量C/C++编程》读书笔记一

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

君子慎独,不欺暗室。卑以自牧,含章可贞。 1032

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

《高质量的C/C++编程指南》读书笔记

笔记

Smart的专栏 1544

《高质量C/C++编程指南》读书笔记22.1.13

头文件:保存程序的声明(declaration) 定义(definition) 文件:保存程序的实现(implementation) 版权和版本的声明位于头文件和定义文件的开头。 空行 在每个类声明之后、每个函数定义结束之后都要加空行。 在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应 加空行分隔。 代码行 if、for、while、do 等语句自占一行,执行语句不得紧跟其后。不论 执行语句有多少都要加{}。这样可以防止书写失误。 尽可能在定义变量的同时初始化该变量(就近原则)。

亿点点细节的博客 253

读书笔记——《高质量 C++/C 编程指南》(1)

想来想去,觉得还是要看一些书。利用闲暇时间(不想学习的时候,嘿嘿)写写读书笔记。书名——《高质量 C++/C 编程指南》这本书里面有一句话——除了完全外行和真正的编程高手外,初读本书,你最先的感受将是惊慌:“哇!我以前捏造的 C++/C 程序怎么会有那么多的毛病?我想对于我们这种不算小白,不算熟悉的人来说,一定会有很多"误打误撞"的代码——代码逻辑有问题,但是把结果跑出来了。定义文件有两部分内容:(1) 对一些头文件的引用。(2) 程序的实现体(包括数据和代码)。

weixin_74197067的博客 1632

《高质量C++编程指南》读书笔记(二)

内存管理:用malloc 或new 申请内存之后,应该立即检查指针值是否为NULL。防止使用指针值为NULL 的内存。不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。免数组或指针的下标越界,特别要当心发生“多1”或者“少1”操作。动态内存的申请与释放必须配对,防止内存泄漏。用free 或delete 释放了内存之后,立即将指针设置为NULL,防止产生“野指针

沉睡海洋的专栏 1565

[转载]<<高质量c/c++编程指南>>读书笔记

一个strcpy函数的代码 能考查三个方面 (1) 编程风格 (2) 出错处理 (3) 算法复杂度分析(用于提供性能) 定义编程老手和编程高手 定义1:能长期稳定地编写出高质量程序的程序员称为编程老手 定义2:能长期稳定地编写出高难度、高质量的程序与称为编程高手 第一章 文件结构 1.1 版权和版本的声明 版权和版本的声明位于头文件和定义文件的开头,主要内容有: (1) 版权信息 (2...

weixin_30432579的博客 350

Effective C++读书笔记

 记得前段时间又一次拿起《Effective C++》的时候,有种豁然开朗的感觉,所以翻出了我第一遍读时做的笔记。只做参考以及查阅之用。如有需要请参阅《Effective C++》书本。 by shenzi/2010.5.17一.让自己习惯C++   条款01:视C++为一个语言联邦    为了更好的理解C++,我们将C++分解为四个主要次语言:C。说到底C++仍是以C

shenzi的天空 2万+

读书笔记——《高质量C++/C编程指南》(3)

【规则1】需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义文件的头部。为便于管理,可以把不同模块的常量集中存放在一个公共的头文件中。【规则2】如果某一常量与其它常量密切相关,应在定义中包含这种关系,而不应给出一些孤立的值。例如:RADIUS * 2;

weixin_74197067的博客 1510
上一篇: 中国大部分程序员的通病
下一篇: 《高质量C++编程指南》读书笔记(二)
kld3000
博客等级 码龄26年 6粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值