【亲测免费】 华为C++编码规范
2026-01-27 04:04:34作者:劳婵绚Shirley
概述
本资源文件提供了华为公司针对C++编程的详细编码规范。该规范旨在帮助开发者编写高质量、可维护且符合公司标准的C++代码。规范内容涵盖了代码排版、注释、标识符命名、可读性、变量与结构、函数与过程、可测性、程序效率、质量保证、代码编辑与编译、代码测试与维护以及宏定义等多个方面。
编写目的
本规范的编写目的是为了统一华为公司内部C++代码的编写风格,提高代码的可读性、可维护性和可扩展性,确保代码质量,减少代码错误,提升开发效率。
文档约定
- 章节编号:规范内容按照章节编号进行组织,便于查找和引用。
- 示例代码:规范中包含了一些示例代码,帮助开发者更好地理解规范要求。
- 注释说明:规范中的注释部分详细解释了每一条规则的目的和适用场景。
预期的读者和阅读建议
本规范适用于所有参与华为公司C++项目开发的工程师、测试人员以及代码审查人员。建议开发者在编写代码前仔细阅读本规范,并在实际开发过程中严格遵守。
参考文献
本规范参考了华为公司内部的技术文档和业界通用的C++编程规范,结合公司实际开发需求进行了调整和补充。
排版要求
程序块缩进
- 使用4个空格进行缩进,不要使用Tab键。
- 每个程序块之间应使用空行分隔。
程序块之间空行
- 函数、循环、条件语句等程序块之间应使用空行分隔,以提高代码的可读性。
长语句和长表达式
- 当语句或表达式过长时,应将其拆分为多行,并在适当的位置进行换行。
循环、判断等长表达式或语句
- 循环和判断语句中的长表达式应尽量简化,避免过于复杂的逻辑。
长参数
- 当函数参数过多时,应考虑将参数封装为结构体或类,以提高代码的可读性。
短语句
- 短语句应尽量简洁明了,避免冗余代码。
条件、循环语句
- 条件和循环语句应尽量使用大括号包裹,即使只有一条语句。
语句对齐
- 多行语句应对齐,以提高代码的可读性。
函数、过程和结构等语句块
- 函数、过程和结构等语句块应使用大括号包裹,并在适当的位置进行缩进。
程序块分界符
- 程序块的分界符应清晰明了,避免混淆。
操作符前后空格
- 操作符前后应使用空格,以提高代码的可读性。
其他
- 其他排版要求应根据具体情况进行调整,确保代码整体风格一致。
注释
有效注释量
- 代码中的注释应尽量详细,确保其他开发者能够理解代码的意图。
公司标识
- 代码中应包含公司标识,以便于识别代码的归属。
说明性文件
- 说明性文件应详细描述代码的功能和使用方法。
源文件头
- 每个源文件的开头应包含文件头注释,说明文件的用途和作者信息。
函数头部说明
- 每个函数的头部应包含详细的注释,说明函数的功能、参数和返回值。
注释与代码一致
- 注释应与代码保持一致,避免出现注释与代码不符的情况。
注释内容
- 注释内容应简洁明了,避免冗余信息。
注释缩写
- 注释中可以使用缩写,但应确保其他开发者能够理解缩写的含义。
注释位置
- 注释应放置在代码的适当位置,避免影响代码的可读性。
变量、常量注释
- 变量和常量的注释应详细说明其用途和取值范围。
数据结构的注释
- 数据结构的注释应详细说明其成员变量的用途和数据类型。
全局变量
- 全局变量的注释应详细说明其作用域和使用场景。
注释缩排
- 注释应与代码保持一致的缩进,以提高代码的可读性。
注释与代码之间空行
- 注释与代码之间应使用空行分隔,以提高代码的可读性。
变量定义、分支语句
- 变量定义和分支语句的注释应详细说明其用途和逻辑。
其他
- 其他注释要求应根据具体情况进行调整,确保代码整体风格一致。
标识符命名
命名清晰
- 标识符的命名应清晰明了,避免使用模糊的命名。
特殊命名需注释
- 特殊命名的标识符应添加注释,说明其特殊用途。
命名风格保持一致
- 标识符的命名风格应保持一致,避免混用不同的命名风格。
变量命名
- 变量的命名应简洁明了,避免使用过于复杂的命名。
命名规范与系统风格一致
- 标识符的命名应与系统风格保持一致,避免出现风格不一致的情况。
其他
- 其他命名要求应根据具体情况进行调整,确保代码整体风格一致。
可读性
运算符优先级
- 代码中应明确运算符的优先级,避免出现逻辑错误。
避免直接使用数字作为标识符
- 代码中应避免直接使用数字作为标识符,应使用常量或枚举类型代替。
其他
- 其他可读性要求应根据具体情况进行调整,确保代码整体风格一致。
变量、结构
公共变量
- 公共变量的使用应谨慎,避免滥用。
公共变量说明
- 公共变量的注释应详细说明其用途和使用场景。
公共变量访问说明
- 公共变量的访问应遵循一定的规则,避免随意修改。
公共变量赋值
- 公共变量的赋值应遵循一定的规则,避免出现逻辑错误。
防止局部变量与公共变量同名
- 局部变量和公共变量不应同名,以避免混淆。
严禁使用未经初始化的变量作为右值
- 未经初始化的变量不应作为右值使用,以避免出现未定义行为。
其他
- 其他变量和结构的要求应根据具体情况进行调整,确保代码整体风格一致。
函数、过程
对所调用函数的错误返回码要仔细、全面地处理
- 调用函数时应仔细处理其错误返回码,避免出现未处理的错误。
明确函数功能,精确(而不是近似)地实现函数设计
- 函数的设计应明确其功能,避免出现功能不明确的情况。
局部变量
- 局部变量的使用应谨慎,避免滥用。
全局变量
- 全局变量的使用应谨慎,避免滥用。
接口函数参数
- 接口函数的参数应明确其用途和取值范围。
其他
- 其他函数和过程的要求应根据具体情况进行调整,确保代码整体风格一致。
可测性
调测开关
- 代码中应包含调测开关,以便于调试和测试。
打印信息
- 调试和测试过程中应打印必要的信息,以便于定位问题。
单元测试
- 代码应进行单元测试,确保其功能正确。
集成测试
- 代码应进行集成测试,确保其与其他模块的兼容性。
断言使用
- 代码中应使用断言,确保其逻辑正确。
设置与取消有关测试手段时,不能影响软件功能功能
- 测试手段的设置和取消不应影响软件的正常功能。
版本维护
- 代码的版本维护应遵循一定的规则,确保版本的稳定性。
其他
- 其他可测性要求应根据具体情况进行调整,确保代码整体风格一致。
程序效率
编程时要经常注意代码的效率
- 编程时应经常注意代码的效率,避免出现性能瓶颈。
提高代码效率
- 代码的效率应尽量提高,避免出现性能问题。
全局效率高于局部效率
- 代码的全局效率应高于局部效率,避免出现局部优化导致全局性能下降的情况。
提高代码空间效率
- 代码的空间效率应尽量提高,避免出现内存浪费的情况。
循环体内工作量最小化
- 循环体内的工作量应尽量最小化,避免出现性能瓶颈。
其他
- 其他程序效率要求应根据具体情况进行调整,确保代码整体风格一致。
质量保证
在软件设计过程中构筑软件质量
- 软件设计过程中应注重质量保证,确保软件的稳定性。
代码质量保证优先原则
- 代码质量保证应优先于其他工作,确保代码的稳定性。
只引用属于自己的存贮空间
- 代码中应只引用属于自己的存储空间,避免出现内存泄漏的情况。
防止引用已经释放的内存空间
- 代码中应防止引用已经释放的内存空间,避免出现未定义行为。
内存及时释放
- 代码中应及时释放不再使用的内存空间,避免出现内存泄漏的情况。
文件句柄及时关闭
- 代码中应及时关闭不再使用的文件句柄,避免出现资源泄漏的情况。
防止内存操作越界
- 代码中应防止内存操作越界,避免出现未定义行为。
认真处理程序所能遇到的各种出错情况
- 代码中应认真处理各种出错情况,避免出现未处理的错误。
初始化变量
- 代码中应初始化所有变量,避免出现未定义行为。
数据一致性检查
- 代码中应进行数据一致性检查,确保数据的正确性。
严禁随意更改其它模块或系统的有关设置和配置
- 代码中严禁随意更改其他模块或系统的设置和配置,避免出现兼容性问题。
不能随意改变与其它模块的接口
- 代码中不能随意改变与其他模块的接口,避免出现兼容性问题。
系统接口
- 代码中应明确系统接口的使用规则,避免出现兼容性问题。
编程时,要防止差 1 错误
- 代码中应防止差 1 错误,避免出现逻辑错误。
操作符检查
- 代码中应进行操作符检查,确保操作符的正确使用。
分支语句写完整
- 代码中的分支语句应写完整,避免出现逻辑错误。
使用 return 语句
- 代码中应使用 return 语句,确保函数的正确返回。
不要滥用 goto 语句
- 代码中应避免滥用 goto 语句,避免出现逻辑混乱的情况。
其他
- 其他质量保证要求应根据具体情况进行调整,确保代码整体风格一致。
代码编辑、编译、审查
打开编译器的所有告警开关对程序进行编译
- 代码编译时应打开编译器的所有告警开关,确保代码的正确性。
在产品软件(项目组)中,要统一编译开关选项
- 产品软件中应统一编译开关选项,确保代码的一致性。
通过代码走读及审查方式对代码进行检查
- 代码应通过代码走读及审查方式进行检查,确保代码的质量。
测试部测试产品之前,应对代码进行抽查及评审
- 测试部测试产品之前,应对代码进行抽查及评审,确保代码的质量。
其他
- 其他代码编辑、编译、审查要求应根据具体情况进行调整,确保代码整体风格一致。
代码测试、维护
单元测试要求至少达到语句覆盖
- 单元测试应至少达到语句覆盖,确保代码的正确性。
单元测试开始要跟踪每一条语句,并观察数据流及变量的变化
- 单元测试开始时应跟踪每一条语句,并观察数据流及变量的变化,确保代码的正确性。
清理、整理或优化后的代码要经过审查及测试
- 清理、整理或优化后的代码应经过审查及测试,确保代码的质量。
代码版本升级要经过严格测试
- 代码版本升级应经过严格测试,确保版本的稳定性。
使用工具软件对代码版本进行维护
- 代码版本维护应使用工具软件,确保版本的稳定性。
正式版本上软件的任何修改都应有详细的文档记录
- 正式版本上软件的任何修改都应有详细的文档记录,确保版本的稳定性。
其他
- 其他代码测试、维护要求应根据具体情况进行调整,确保代码整体风格一致。
宏
用宏定义表达式时,要使用完备的括号
- 用宏定义表达式时,应使用完备的括号,确保表达式的正确性。
将宏所定义的多条表达式放在大括号中
- 将宏所定义的多条表达式放在大括号中,确保表达式的正确性。
使用宏时,不允许参数发生变化
- 使用宏时,不允许参数发生变化,确保表达式的正确性。
其他
- 其他宏定义要求应根据具体情况进行调整,确保代码整体风格一致。
登录后查看全文
热门项目推荐
相关项目推荐
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
ruoyi-plus-soybeanRuoYi-Plus-Soybean 是一个现代化的企业级多租户管理系统,它结合了 RuoYi-Vue-Plus 的强大后端功能和 Soybean Admin 的现代化前端特性,为开发者提供了完整的企业管理解决方案。Vue06- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00
项目优选
收起
deepin linux kernel
C
27
11
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
570
3.85 K
Ascend Extension for PyTorch
Python
387
458
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
894
680
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
354
212
昇腾LLM分布式训练框架
Python
120
146
暂无简介
Dart
805
198
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
12
1
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
68
20
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.37 K
781