C++编程规范学习总结

学习华为C/C++编程规范(最新版)的一点心得体会 学习华为C/C++编程规范(最新版)的一点心得体会缘起深入华为的进击我的感受全面务实高效后续 缘起 第一次接触编程规范,是在我十多年前刚参加工作的第一家公司,虽然规模不大,只有十几个程序员,但是大家终于无法忍受每个人个性化的代码书写方式, 最终讨论制订了一份C++编程规范,很简单,只有几页Word文档,主要是变量命名/格式对齐之类的一些代码可读性方面的约定。 当时对编程规范的印象就是为了统一代码风... 阅读详情
 

 一、头文件

 

所有头文件都应该使用#define 防止头文件被多重包含(multiple inclusion),命名格式当是:<PROJECT>_<PATH>_<FILE>_H_为保证唯一性,头文件的命名应基于其所在项目源代码树的全路径。例如,项目foo 中的头
文件foo/src/bar/baz.h 按如下方式保护:
#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_
...
#endif // FOO_BAR_BAZ_H_

 

内联函数

只有当函数只有10 行甚至更少时才会将其定义为内联函数(inline function)。

优点:当函数体比较小的时候,内联该函数可以令目标代码更加高效。对于存取函数
(accessor、mutator)以及其他一些比较短的关键执行函数

缺点:滥用内联将导致程序变慢,内联有可能是目标代码量或增或减,这取决于被内联的函
数的大小

结论:一个比较得当的处理规则是,不要内联超过10 行的函数。对于析构函数应慎重对待,
析构函数往往比其表面看起来要长,因为有一些隐式成员和基类析构函数(如果有的话)被
调用!
另一有用的处理规则:内联那些包含循环或switch 语句的函数是得不偿失的,除非在大多
数情况下,这些循环或switch 语句从不执行。

 

函数参数顺序(Function Parameter Ordering)

定义函数时,参数顺序为:输入参数在前,输出参数在后。

包含文件的名称及次序

次序如下:C 库、C++库、其他库的.h、项目内的.h。

二、作用域

在.cc 文件中,允许甚至提倡使用不具名命名空间,以避免运行时的命名冲突:

namespace { // .cc 文件中
// 命名空间的内容无需缩进
enum { UNUSED, EOF, ERROR }; // 经常使用的符号
bool AtEof() { return pos_ == EOF; } // 使用本命名空间内的符号EOF
} // namespace

不能在.h 文件中使用不具名命名空间。
具名命名空间使用方式如下:


命名空间将除文件包含、全局标识的声明/定义以及类的前置声明外的整个源文件封装起来,
以同其他命名空间相区分。

// .h 文件
namespace mynamespace {
// 所有声明都置于命名空间中
// 注意不要使用缩进
class MyClass {
public:
...
void Foo();
};
} // namespace mynamespace
// .cc 文件
namespace mynamespace {
// 函数定义都置于命名空间中
void MyClass::Foo() {
...
}
} // namespace mynamespace

不要声明命名空间std 下的任何内容,包括标准库类的前置声明。声明std 下的实体会导
致不明确的行为,如,不可移植。声明标准库下的实体,需要包含对应的头文件。
最好不要使用using 指示符,以保证命名空间下的所有名称都可以正常使用。
// 禁止——污染命名空间
using namespace foo;
在.cc 文件、.h 文件的函数、方法或类中,可以使用using。
// 允许:.cc 文件中
// .h 文件中,必须在函数、方法或类的内部使用
using ::foo::bar;

非成员函数(Nonmember)、静态成员函数(Static Member)和全局函数(Global
Functions)

使用命名空间中的非成员函数或静态成员函数,尽量不要使用全局函数。

有时,不把函数限定在类的实体中是有益的,甚至需要这么做,要么作为静态成员,要么作
为非成员函数。
非成员函数不应依赖于外部变量,并尽量置于某个命名空间中。相比单纯为
了封装若干不共享任何静态数据的静态成员函数而创建类,不如使用命名空间。

 

《高质量的C/C++编程规范》学习 本篇文章是我在学习林锐博士的《高质量的C/C++编程》及一些其他网络资料之后进行的一篇自我学习总结。由于对C++还不是很熟悉,所以本篇文章主要总结了C语言部分,在日后深入学习C++时,在进行详细补充。 阅读详情

相关推荐

2022 精心整理的 C语言/C++ 语言学习宝藏,值得收藏~

知名大学计算机系开源课程收录: 浙江大学课程攻略共享计划 清华大学计算机系课程攻略 上海交通大学课程资料分享 北京航空航天大学(北航)课程作业资料共享计划 华北电力大学计算机系课程攻略 北京邮电大学计算机考研信息汇总 C++从入门到“精通“,我踩过的坑希望你可以绕着走_程序员编程指南的博客-优快云博客1 c++ 发展方向实验室开发C++绝对是工科生中的第一大语言,C++兼具面向过程以及面向对象的特性,既拥有比较优秀的运行速度,又有良好的大型项目开发能力,那简直可以制霸高校实验室了。后端开发学了

编程与实战的博客 9021

C/C++面试相关问题

本人之前从事的是嵌入式相关行业,主要是数字座舱相关操作系统底层以及中间层的开发,主要是基于Android、qnx、以及linux,语言的话用的比较多的是c/c++、java、python这些。最近面试的一些总结如下。 ...

weixin_34764432的博客 411

HX720/HX711 数据采集实战:从硬件配置到姿态解析(附源码详解)

本文详细解析了HX720/HX711数据采集传感器的硬件配置与姿态解析实战技巧,包括选型指南、电路设计避坑、抗干扰方案及源码实现。通过优化驱动代码和数据处理算法,提升采样率与精度,适用于动态称重和工业检测等场景。附源码详解,助力开发者快速掌握高精度数据采集技术。

weixin_30752699的博客 655

11条最全面的C/C++编码规范总结

对于不同的编程语言来说,具体的编码规范可以有很大的不同,但是其宗旨都是一致的,就是保证代码在高质量完成需求的同时具备良好的可读性、可维护性。例如我们可以规定某个项目的C语言程序要遵循这样的规定:变量的命名,头文件的书写和#include 等等。 下面是一些广为采用的编码规范:   • GNU Coding Standards   • Guidelines for the Use

crkres9527 1万+

腾讯ACE反作弊系统:内核驱动与AI行为分析如何守护游戏公平

在游戏安全领域,反作弊技术是保障公平竞技环境的核心防线。其基本原理是通过监控系统关键行为,识别并阻断非法的第三方程序干预。从技术实现看,现代反作弊方案普遍采用分层防御架构,结合用户态模块进行应用层检测,并依赖内核态驱动实现底层深度监控,以此构建纵深防御体系。这种技术的核心价值在于,它能有效对抗从简单内存修改到高级驱动级作弊等多种威胁,维护游戏经济系统和玩家体验的完整性。随着作弊手段的演进,行为分析与AI赋能变得至关重要,系统通过机器学习模型分析进程行为序列的异常模式,即使面对未知特征的外挂变种也能进行有效识

weixin_33978578的博客 741

1991-2020年气候背景数据集

2011 年,国家气象信息中心对 1951-2010 年 2400 余个地面站气温、气压、降水、湿度、日照等 19 大要素项的定时观测资料和日极值资料中由数字化过程中引起的系统性问题(例如数字化遗漏、整段拷贝等问题)进行质量检测、质量控制和错误数据的更正,形成较高质量的地面基础资料集。1991-2020年中国地面气候值数据集提供了中国2438个站点的气温、降水、气压、风向风速、相对湿度、水汽压、云、天气现象、能见度、蒸发、积雪、地温、冻土、日照共14个要素的气候背景信息。数据时间:30年平均。

地球资源数据云的官方博客 1595

C++的编程规范学习

C++的文件结构 在C/C++中通常都存在两个文件。      - 头文件以.h为后缀的,用于保存程序的声明。      - 定义文件以.cpp等形式存在,用于保存程序的实现。 头文件 头文件的主要作用在于多个代码文件全局变量(函数)的重用、防止定义的冲突,对各个被调用函数给出一个描述,其本身不需要包含程序的逻辑实现代码,它只起描述性作用,用户程序只需要按照头文件中的接口声明来调用相关函数或变量,链接器会从库

努力加油,冲~ 258

MongoDB启动失败(service mongod start):Failed to unlink socket file /tmp/mongodb-27017.sock Unknown error

错误日志(/var/log/mongodb/mongo.log): 2019-09-16T06:00:00.251+0000 I CONTROL [main] ***** SERVER RESTARTED ***** 2019-09-16T06:00:00.253+0000 I CONTROL [main] Automatically disabling TLS 1.0, to force-e...

deantzzz的博客 1837

嵌入式 C++ 语言编程规范文档个人学习版(参考《Google C++ 编码规范中文版》)

本文基于Google C++编码规范,针对嵌入式系统(如MCU、RTOS等)的特殊需求,提出了适配的C++编程规范。主要内容包括:1)头文件管理规范,强调防止多重包含和减少依赖;2)作用域管理,建议使用命名空间避免污染;3)类和结构体设计原则,注重构造/析构安全和拷贝控制;4)智能指针使用限制,推荐scoped_ptr而非shared_ptr;5)命名约定,要求采用描述性命名;6)代码注释规范,特别强调硬件相关说明;7)代码格式标准,统一缩进和排版;8)嵌入式特有规范,如寄存器操作、ISR设计、内存管理等。

C++,Java,Python,C#编程选手,偶尔刷刷leetcode 926

三极管共集电极放大电路详解:射极跟随器的原理、计算与应用

三极管放大电路是模拟电子技术的基石,常见组态包括共发射极、共基极和共集电极。其中共集电极电路因输入电阻大、输出电阻小、电压增益接近1的特性,常被用作射极跟随器,在信号缓冲、级间隔离和低阻抗负载驱动等场景中发挥关键作用。其核心价值并非电压放大,而是完成阻抗变换,将高内阻信号源转换为低内阻输出,同时保持信号幅值基本不变。理解其静态工作点计算与动态参数推导(如电压增益、输入输出电阻)是设计实用电路的前提。本文结合12V电源下的具体设计实例和仿真验证,梳理了从电路识别、参数计算到工程实践的完整流程,并指出常见设计误

weixin_29193259的博客 367

SpringBoot系列之实现一个AI聊天助手

本文介绍了基于Spring Boot框架实现的AI聊天助手项目。该项目使用Spring Boot 3.2.3、Spring AI 1.0.0-M5等技术栈,集成DeepSeek-R1-Distill-Llama-8B模型实现智能对话功能。文章详细介绍了项目配置流程、运行方式和核心代码实现,包括ChatMessage模型类和服务类ChatService的关键功能,如消息处理、历史记录管理和AI响应获取等。读者可通过提供的GitHub链接获取完整代码,快速搭建自己的AI聊天应用。

Nicky's blog 1449

C/C++对比学习、google C++编程规范

C和C++的关系: 学习任何一门新的语言都必须对已学过的进行思考,找出异同点,方便学习新语言的特性。 C++的意思:C plus plus C++是完全兼容C语言的,其中很多特性都能体现出来。 C:.c stdio.h printf scanf 函数无重载,且结构体不能为空 过程 C++: .cpp iostream(引入命名空间) cout cin 有重载,且类可以为空 强调的是对象 ...

huangjie_01的博客 330

ubuntu-emto-cpa 测试和使用(单核运行)

ubuntu-emto-cpa 测试和使用(单核运行)

qq_45834835的博客 1399

《C++编程规范》学习摘记

《C++编程规范》学习摘记1、好的商业理念能够一言一蔽之;每个程序也应该只有一个明确的目的。2、软件以简单为美,正确优于速度,简单优于复杂,清晰优于机巧,安全优于不安全。3、程序必须为阅读它的人编写,只是顺便用于机器执行。4、让一个正确的程序更快速,比让一个快速的程序正确要容易太多、太多。 5、共享导致冲突。避免共享数据,尤其是全局数据,用通信方式(比如消息队列)实现数据共享。

TruthS的专栏 893

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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

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

C++编程规范学习(整理)

命名——字母混合型(MyClass) 或 下划线命名(num_err)。 通过名字可以了解意思;类型/变量-》名词;函数-》动词。 文件名:小写 + 下划线, .h和.cpp基本上一一对应,若inline函数多则单独成为 -inl.h文件。 类型名:字母混合型(MyClass)。 纯虚类(接口)在后面 + interface。 变量名:下划线命名(num_err),类成员变量以“_”结

fredric0611的专栏 301

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

c++编程规范学习笔记(一)

这是自己通过学习《C++ Codeing Standards》时,做的学习笔记!一共讲述了101条规则、准则和最佳实践!!! 组织与策划问题第0条、 不要拘泥于小节不要规定缩进多少,应该规定用缩进来体现代码的结构;不要规定行的具体长度;不要在命名方面规定过多,应该规定的是使用统一的命名规则;如类、函数和枚举的名称形如:LikeThis,变量名形如:likeThis,私有变量名形如:likeThis_,宏名形如:LIKE_THIS;不要规定注释体例,应该编写有用的注释。在编写函数时,最好是“单入口,单出口”(

知识小屋 813

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

《数学之美》——第21章 拼音输入法的数学原理 & 本学期要学习的C++编程规范(课堂作业)

返回类型和函数名在同一行, 参数也尽量放在同一行, 如果放不下就对形参分行, 分行方式与 函数调用 一致.

ViangQM的博客 984

C++学习笔记之C++编程规范总揽

组织和策略问题 第0条    不要拘泥于小节(又名:了解哪些东西不应该标准化) 第1条    在高警告级别干着急利落地进行编译 第2条    使用自动构建系统 第3条    使用版本控制系统 第4条    在代码审查上投入 设计风格 第5条    一个实体应该只有一个紧凑的职责 第6条    正确、简单和清晰第一 第7条    编程中应知道何时和如何考虑可伸缩性 第8条

linux5Blue19的专栏 941

Google C++编程规范学习--头文件

1、使用#define防止多次包含(multiple inclusion),宏命令规则:project_path_file_H_,如项目test中include目录下一个文件foo.h,宏定义为:#define TEST_INCLUDE_FOO_H_; 2、尽量使用前向声明代替头文件包含。原因: A文件包含: B.h C.h B或C头文件发生变化时,编译时A文件及依赖A.h的所有

一路上 603

【学习笔记】C++ 编程规范——101条规则、准则与最佳实践

过渡相互依赖的一个症状,就是局部发生变化时需要进行增量构建,不得不重新编译项目中的很大一部分代码;与编译器一致,成员变量初始化的顺序要与类定义中的声明的顺序始终保持一致;不用考虑构造函数初始化列表中编写的顺序,要确保构造函数代码不会导致混淆地制定不同的顺序;重复会导致膨胀,具有链接的实体,包括名字空间级的变量或函数,都需要分配内存,在头文件中定义这样的实体将导致连接时错误或者内存的浪费,请将所有具有链接的实体放入实现文件;// 要避免在头文件中定义具有外部链接的实体以上代码可能会导致链接器出现错误;

933

基于C++11标准的Vector容器与多维数组编程规范学习

本文基于C++11标准的Vector容器与多维数组编程规范进行了学习并且对实践出现的问题进行了总结与讨论

不要仅为成功而努力,要为做一个有价值的人而努力 494

C++ 编程规范101读书笔记(0)引论

前一段时间,工作和生活的事情比较多,一直没有时间好好地来学习,博客一直没有什么有价值的东西更新。最近把以前的工作辞了,也有时间来看看以前买的书,C++这方面的书,我有几本:> ,>,提高C++性能的编程技术>>,  以前只是扫描地看了一两遍。这次,想仔细地再看一遍,并在博客上整理出来,做个记录。

老程序员专栏 601

GetQzonehistory:把十年QQ空间历史说说完整导出,Excel和网页一次拿全

GetQzonehistory 是一个本地运行的 Python 小工具,用来把你 QQ 空间发过的历史说说完整抓取下来,导出成 Excel 表格和一个还原空间样式的网页文件,长期存在自己的硬盘里。适合说说发得多、想把这些旧记录完整存档的人。 ## 先说结果:跑完之后你会得到什么 程序跑完后会自动打开 `resource/result/你的QQ号/` 这个文件夹,里面是一套完整的东西: | 产

gitblog_00301的博客 631

C++编程规范学习笔记(1)

第0条:不要拘泥于小节 只规定 需要规定的事情,不要强加个人爱好或过时的做法 不要使用晦涩的名称 使用全大写表示宏 C++编程规范中不应该使用匈牙利记法(将类型信息并入变量命中) 第1条:在高警告级别干净利落的进行编译 高度重视警告,使用编译器的最高警告级别。 理解所有警告,通过修改代码而不是降低警告级别来排除警告 无法修改的库头文件可能包含引起警告(可能...

weixin_34110749的博客 96

《C++编程规范:101条规则、准则与最佳实践》学习笔记

《C++编程规范:101条规则、准则与最佳实践》学习笔记 转载:http://dsqiu.iteye.com/blog/1688217 组织和策略问题 0. 不要为小事斤斤计较。(或者说是:知道什么东西不需要标准化) 无需在多个项目或者整个公司范围内强制实施一致的编码格式。只要规定需要规定的事情:不要强制施加个人的喜好或者过时的做法。 C++不应该使用匈牙利命名法。在有智能指针的情况下,...

mw_nice的博客 520
上一篇: C++文件操作,数据读写总结
下一篇: 与一个Coder交谈过程。。
xiaoding133
博客等级 码龄19年 415粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值