华为C编码规范

2020-10-23

华为C++编码规范

概述

本资源文件提供了华为公司针对C++编程的详细编码规范。该规范旨在帮助开发者编写高质量、可维护且符合公司标准的C++代码。规范内容涵盖了代码排版、注释、标识符命名、可读性、变量与结构、函数与过程、可测性、程序效率、质量保证、代码编辑与编译、代码测试与维护以及宏定义等多个方面。

编写目的

本规范的编写目的是为了统一华为公司内部C++代码的编写风格,提高代码的可读性、可维护性和可扩展性,确保代码质量,减少代码错误,提升开发效率。

文档约定

  • 章节编号:规范内容按照章节编号进行组织,便于查找和引用。
  • 示例代码:规范中包含了一些示例代码,帮助开发者更好地理解规范要求。
  • 注释说明:规范中的注释部分详细解释了每一条规则的目的和适用场景。

预期的读者和阅读建议

本规范适用于所有参与华为公司C++项目开发的工程师、测试人员以及代码审查人员。建议开发者在编写代码前仔细阅读本规范,并在实际开发过程中严格遵守。

参考文献

本规范参考了华为公司内部的技术文档和业界通用的C++编程规范,结合公司实际开发需求进行了调整和补充。

排版要求

程序块缩进

  • 使用4个空格进行缩进,不要使用Tab键。
  • 每个程序块之间应使用空行分隔。

程序块之间空行

  • 函数、循环、条件语句等程序块之间应使用空行分隔,以提高代码的可读性。

长语句和长表达式

  • 当语句或表达式过长时,应将其拆分为多行,并在适当的位置进行换行。

循环、判断等长表达式或语句

  • 循环和判断语句中的长表达式应尽量简化,避免过于复杂的逻辑。

长参数

  • 当函数参数过多时,应考虑将参数封装为结构体或类,以提高代码的可读性。

短语句

  • 短语句应尽量简洁明了,避免冗余代码。

条件、循环语句

  • 条件和循环语句应尽量使用大括号包裹,即使只有一条语句。

语句对齐

  • 多行语句应对齐,以提高代码的可读性。

函数、过程和结构等语句块

  • 函数、过程和结构等语句块应使用大括号包裹,并在适当的位置进行缩进。

程序块分界符

  • 程序块的分界符应清晰明了,避免混淆。

操作符前后空格

  • 操作符前后应使用空格,以提高代码的可读性。

其他

  • 其他排版要求应根据具体情况进行调整,确保代码整体风格一致。

注释

有效注释量

  • 代码中的注释应尽量详细,确保其他开发者能够理解代码的意图。

公司标识

  • 代码中应包含公司标识,以便于识别代码的归属。

说明性文件

  • 说明性文件应详细描述代码的功能和使用方法。

源文件头

  • 每个源文件的开头应包含文件头注释,说明文件的用途和作者信息。

函数头部说明

  • 每个函数的头部应包含详细的注释,说明函数的功能、参数和返回值。

注释与代码一致

  • 注释应与代码保持一致,避免出现注释与代码不符的情况。

注释内容

  • 注释内容应简洁明了,避免冗余信息。

注释缩写

  • 注释中可以使用缩写,但应确保其他开发者能够理解缩写的含义。

注释位置

  • 注释应放置在代码的适当位置,避免影响代码的可读性。

变量、常量注释

  • 变量和常量的注释应详细说明其用途和取值范围。

数据结构的注释

  • 数据结构的注释应详细说明其成员变量的用途和数据类型。

全局变量

  • 全局变量的注释应详细说明其作用域和使用场景。

注释缩排

  • 注释应与代码保持一致的缩进,以提高代码的可读性。

注释与代码之间空行

  • 注释与代码之间应使用空行分隔,以提高代码的可读性。

变量定义、分支语句

  • 变量定义和分支语句的注释应详细说明其用途和逻辑。

其他

  • 其他注释要求应根据具体情况进行调整,确保代码整体风格一致。

标识符命名

命名清晰

  • 标识符的命名应清晰明了,避免使用模糊的命名。

特殊命名需注释

  • 特殊命名的标识符应添加注释,说明其特殊用途。

命名风格保持一致

  • 标识符的命名风格应保持一致,避免混用不同的命名风格。

变量命名

  • 变量的命名应简洁明了,避免使用过于复杂的命名。

命名规范与系统风格一致

  • 标识符的命名应与系统风格保持一致,避免出现风格不一致的情况。

其他

  • 其他命名要求应根据具体情况进行调整,确保代码整体风格一致。

可读性

运算符优先级

  • 代码中应明确运算符的优先级,避免出现逻辑错误。

避免直接使用数字作为标识符

  • 代码中应避免直接使用数字作为标识符,应使用常量或枚举类型代替。

其他

  • 其他可读性要求应根据具体情况进行调整,确保代码整体风格一致。

变量、结构

公共变量

  • 公共变量的使用应谨慎,避免滥用。

公共变量说明

  • 公共变量的注释应详细说明其用途和使用场景。

公共变量访问说明

  • 公共变量的访问应遵循一定的规则,避免随意修改。

公共变量赋值

  • 公共变量的赋值应遵循一定的规则,避免出现逻辑错误。

防止局部变量与公共变量同名

  • 局部变量和公共变量不应同名,以避免混淆。

严禁使用未经初始化的变量作为右值

  • 未经初始化的变量不应作为右值使用,以避免出现未定义行为。

其他

  • 其他变量和结构的要求应根据具体情况进行调整,确保代码整体风格一致。

函数、过程

对所调用函数的错误返回码要仔细、全面地处理

  • 调用函数时应仔细处理其错误返回码,避免出现未处理的错误。

明确函数功能,精确(而不是近似)地实现函数设计

  • 函数的设计应明确其功能,避免出现功能不明确的情况。

局部变量

  • 局部变量的使用应谨慎,避免滥用。

全局变量

  • 全局变量的使用应谨慎,避免滥用。

接口函数参数

  • 接口函数的参数应明确其用途和取值范围。

其他

  • 其他函数和过程的要求应根据具体情况进行调整,确保代码整体风格一致。

可测性

调测开关

  • 代码中应包含调测开关,以便于调试和测试。

打印信息

  • 调试和测试过程中应打印必要的信息,以便于定位问题。

单元测试

  • 代码应进行单元测试,确保其功能正确。

集成测试

  • 代码应进行集成测试,确保其与其他模块的兼容性。

断言使用

  • 代码中应使用断言,确保其逻辑正确。

设置与取消有关测试手段时,不能影响软件功能功能

  • 测试手段的设置和取消不应影响软件的正常功能。

版本维护

  • 代码的版本维护应遵循一定的规则,确保版本的稳定性。

其他

  • 其他可测性要求应根据具体情况进行调整,确保代码整体风格一致。

程序效率

编程时要经常注意代码的效率

  • 编程时应经常注意代码的效率,避免出现性能瓶颈。

提高代码效率

  • 代码的效率应尽量提高,避免出现性能问题。

全局效率高于局部效率

  • 代码的全局效率应高于局部效率,避免出现局部优化导致全局性能下降的情况。

提高代码空间效率

  • 代码的空间效率应尽量提高,避免出现内存浪费的情况。

循环体内工作量最小化

  • 循环体内的工作量应尽量最小化,避免出现性能瓶颈。

其他

  • 其他程序效率要求应根据具体情况进行调整,确保代码整体风格一致。

质量保证

在软件设计过程中构筑软件质量

  • 软件设计过程中应注重质量保证,确保软件的稳定性。

代码质量保证优先原则

  • 代码质量保证应优先于其他工作,确保代码的稳定性。

只引用属于自己的存贮空间

  • 代码中应只引用属于自己的存储空间,避免出现内存泄漏的情况。

防止引用已经释放的内存空间

  • 代码中应防止引用已经释放的内存空间,避免出现未定义行为。

内存及时释放

  • 代码中应及时释放不再使用的内存空间,避免出现内存泄漏的情况。

文件句柄及时关闭

  • 代码中应及时关闭不再使用的文件句柄,避免出现资源泄漏的情况。

防止内存操作越界

  • 代码中应防止内存操作越界,避免出现未定义行为。

认真处理程序所能遇到的各种出错情况

  • 代码中应认真处理各种出错情况,避免出现未处理的错误。

初始化变量

  • 代码中应初始化所有变量,避免出现未定义行为。

数据一致性检查

  • 代码中应进行数据一致性检查,确保数据的正确性。

严禁随意更改其它模块或系统的有关设置和配置

  • 代码中严禁随意更改其他模块或系统的设置和配置,避免出现兼容性问题。

不能随意改变与其它模块的接口

  • 代码中不能随意改变与其他模块的接口,避免出现兼容性问题。

系统接口

  • 代码中应明确系统接口的使用规则,避免出现兼容性问题。

编程时,要防止差 1 错误

  • 代码中应防止差 1 错误,避免出现逻辑错误。

操作符检查

  • 代码中应进行操作符检查,确保操作符的正确使用。

分支语句写完整

  • 代码中的分支语句应写完整,避免出现逻辑错误。

使用 return 语句

  • 代码中应使用 return 语句,确保函数的正确返回。

不要滥用 goto 语句

  • 代码中应避免滥用 goto 语句,避免出现逻辑混乱的情况。

其他

  • 其他质量保证要求应根据具体情况进行调整,确保代码整体风格一致。

代码编辑、编译、审查

打开编译器的所有告警开关对程序进行编译

  • 代码编译时应打开编译器的所有告警开关,确保代码的正确性。

在产品软件(项目组)中,要统一编译开关选项

  • 产品软件中应统一编译开关选项,确保代码的一致性。

通过代码走读及审查方式对代码进行检查

  • 代码应通过代码走读及审查方式进行检查,确保代码的质量。

测试部测试产品之前,应对代码进行抽查及评审

  • 测试部测试产品之前,应对代码进行抽查及评审,确保代码的质量。

其他

  • 其他代码编辑、编译、审查要求应根据具体情况进行调整,确保代码整体风格一致。

代码测试、维护

单元测试要求至少达到语句覆盖

  • 单元测试应至少达到语句覆盖,确保代码的正确性。

单元测试开始要跟踪每一条语句,并观察数据流及变量的变化

  • 单元测试开始时应跟踪每一条语句,并观察数据流及变量的变化,确保代码的正确性。

清理、整理或优化后的代码要经过审查及测试

  • 清理、整理或优化后的代码应经过审查及测试,确保代码的质量。

代码版本升级要经过严格测试

  • 代码版本升级应经过严格测试,确保版本的稳定性。

使用工具软件对代码版本进行维护

  • 代码版本维护应使用工具软件,确保版本的稳定性。

正式版本上软件的任何修改都应有详细的文档记录

  • 正式版本上软件的任何修改都应有详细的文档记录,确保版本的稳定性。

其他

  • 其他代码测试、维护要求应根据具体情况进行调整,确保代码整体风格一致。

用宏定义表达式时,要使用完备的括号

  • 用宏定义表达式时,应使用完备的括号,确保表达式的正确性。

将宏所定义的多条表达式放在大括号中

  • 将宏所定义的多条表达式放在大括号中,确保表达式的正确性。

使用宏时,不允许参数发生变化

  • 使用宏时,不允许参数发生变化,确保表达式的正确性。

其他

  • 其他宏定义要求应根据具体情况进行调整,确保代码整体风格一致。

下载链接

华为C编码规范分享