华为C++编码规范
概述
本资源文件提供了华为公司针对C++编程的详细编码规范。该规范旨在帮助开发者编写高质量、可维护且符合公司标准的C++代码。规范内容涵盖了代码排版、注释、标识符命名、可读性、变量与结构、函数与过程、可测性、程序效率、质量保证、代码编辑与编译、代码测试与维护以及宏定义等多个方面。
编写目的
本规范的编写目的是为了统一华为公司内部C++代码的编写风格,提高代码的可读性、可维护性和可扩展性,确保代码质量,减少代码错误,提升开发效率。
文档约定
- 章节编号:规范内容按照章节编号进行组织,便于查找和引用。
- 示例代码:规范中包含了一些示例代码,帮助开发者更好地理解规范要求。
- 注释说明:规范中的注释部分详细解释了每一条规则的目的和适用场景。
预期的读者和阅读建议
本规范适用于所有参与华为公司C++项目开发的工程师、测试人员以及代码审查人员。建议开发者在编写代码前仔细阅读本规范,并在实际开发过程中严格遵守。
参考文献
本规范参考了华为公司内部的技术文档和业界通用的C++编程规范,结合公司实际开发需求进行了调整和补充。
排版要求
程序块缩进
- 使用4个空格进行缩进,不要使用Tab键。
- 每个程序块之间应使用空行分隔。
程序块之间空行
- 函数、循环、条件语句等程序块之间应使用空行分隔,以提高代码的可读性。
长语句和长表达式
- 当语句或表达式过长时,应将其拆分为多行,并在适当的位置进行换行。
循环、判断等长表达式或语句
- 循环和判断语句中的长表达式应尽量简化,避免过于复杂的逻辑。
长参数
- 当函数参数过多时,应考虑将参数封装为结构体或类,以提高代码的可读性。
短语句
- 短语句应尽量简洁明了,避免冗余代码。
条件、循环语句
- 条件和循环语句应尽量使用大括号包裹,即使只有一条语句。
语句对齐
- 多行语句应对齐,以提高代码的可读性。
函数、过程和结构等语句块
- 函数、过程和结构等语句块应使用大括号包裹,并在适当的位置进行缩进。
程序块分界符
- 程序块的分界符应清晰明了,避免混淆。
操作符前后空格
- 操作符前后应使用空格,以提高代码的可读性。
其他
- 其他排版要求应根据具体情况进行调整,确保代码整体风格一致。
注释
有效注释量
- 代码中的注释应尽量详细,确保其他开发者能够理解代码的意图。
公司标识
- 代码中应包含公司标识,以便于识别代码的归属。
说明性文件
- 说明性文件应详细描述代码的功能和使用方法。
源文件头
- 每个源文件的开头应包含文件头注释,说明文件的用途和作者信息。
函数头部说明
- 每个函数的头部应包含详细的注释,说明函数的功能、参数和返回值。
注释与代码一致
- 注释应与代码保持一致,避免出现注释与代码不符的情况。
注释内容
- 注释内容应简洁明了,避免冗余信息。
注释缩写
- 注释中可以使用缩写,但应确保其他开发者能够理解缩写的含义。
注释位置
- 注释应放置在代码的适当位置,避免影响代码的可读性。
变量、常量注释
- 变量和常量的注释应详细说明其用途和取值范围。
数据结构的注释
- 数据结构的注释应详细说明其成员变量的用途和数据类型。
全局变量
- 全局变量的注释应详细说明其作用域和使用场景。
注释缩排
- 注释应与代码保持一致的缩进,以提高代码的可读性。
注释与代码之间空行
- 注释与代码之间应使用空行分隔,以提高代码的可读性。
变量定义、分支语句
- 变量定义和分支语句的注释应详细说明其用途和逻辑。
其他
- 其他注释要求应根据具体情况进行调整,确保代码整体风格一致。
标识符命名
命名清晰
- 标识符的命名应清晰明了,避免使用模糊的命名。
特殊命名需注释
- 特殊命名的标识符应添加注释,说明其特殊用途。
命名风格保持一致
- 标识符的命名风格应保持一致,避免混用不同的命名风格。
变量命名
- 变量的命名应简洁明了,避免使用过于复杂的命名。
命名规范与系统风格一致
- 标识符的命名应与系统风格保持一致,避免出现风格不一致的情况。
其他
- 其他命名要求应根据具体情况进行调整,确保代码整体风格一致。
可读性
运算符优先级
- 代码中应明确运算符的优先级,避免出现逻辑错误。
避免直接使用数字作为标识符
- 代码中应避免直接使用数字作为标识符,应使用常量或枚举类型代替。
其他
- 其他可读性要求应根据具体情况进行调整,确保代码整体风格一致。
变量、结构
公共变量
- 公共变量的使用应谨慎,避免滥用。
公共变量说明
- 公共变量的注释应详细说明其用途和使用场景。
公共变量访问说明
- 公共变量的访问应遵循一定的规则,避免随意修改。
公共变量赋值
- 公共变量的赋值应遵循一定的规则,避免出现逻辑错误。
防止局部变量与公共变量同名
- 局部变量和公共变量不应同名,以避免混淆。
严禁使用未经初始化的变量作为右值
- 未经初始化的变量不应作为右值使用,以避免出现未定义行为。
其他
- 其他变量和结构的要求应根据具体情况进行调整,确保代码整体风格一致。
函数、过程
对所调用函数的错误返回码要仔细、全面地处理
- 调用函数时应仔细处理其错误返回码,避免出现未处理的错误。
明确函数功能,精确(而不是近似)地实现函数设计
- 函数的设计应明确其功能,避免出现功能不明确的情况。
局部变量
- 局部变量的使用应谨慎,避免滥用。
全局变量
- 全局变量的使用应谨慎,避免滥用。
接口函数参数
- 接口函数的参数应明确其用途和取值范围。
其他
- 其他函数和过程的要求应根据具体情况进行调整,确保代码整体风格一致。
可测性
调测开关
- 代码中应包含调测开关,以便于调试和测试。
打印信息
- 调试和测试过程中应打印必要的信息,以便于定位问题。
单元测试
- 代码应进行单元测试,确保其功能正确。
集成测试
- 代码应进行集成测试,确保其与其他模块的兼容性。
断言使用
- 代码中应使用断言,确保其逻辑正确。
设置与取消有关测试手段时,不能影响软件功能功能
- 测试手段的设置和取消不应影响软件的正常功能。
版本维护
- 代码的版本维护应遵循一定的规则,确保版本的稳定性。
其他
- 其他可测性要求应根据具体情况进行调整,确保代码整体风格一致。
程序效率
编程时要经常注意代码的效率
- 编程时应经常注意代码的效率,避免出现性能瓶颈。
提高代码效率
- 代码的效率应尽量提高,避免出现性能问题。
全局效率高于局部效率
- 代码的全局效率应高于局部效率,避免出现局部优化导致全局性能下降的情况。
提高代码空间效率
- 代码的空间效率应尽量提高,避免出现内存浪费的情况。
循环体内工作量最小化
- 循环体内的工作量应尽量最小化,避免出现性能瓶颈。
其他
- 其他程序效率要求应根据具体情况进行调整,确保代码整体风格一致。
质量保证
在软件设计过程中构筑软件质量
- 软件设计过程中应注重质量保证,确保软件的稳定性。
代码质量保证优先原则
- 代码质量保证应优先于其他工作,确保代码的稳定性。
只引用属于自己的存贮空间
- 代码中应只引用属于自己的存储空间,避免出现内存泄漏的情况。
防止引用已经释放的内存空间
- 代码中应防止引用已经释放的内存空间,避免出现未定义行为。
内存及时释放
- 代码中应及时释放不再使用的内存空间,避免出现内存泄漏的情况。
文件句柄及时关闭
- 代码中应及时关闭不再使用的文件句柄,避免出现资源泄漏的情况。
防止内存操作越界
- 代码中应防止内存操作越界,避免出现未定义行为。
认真处理程序所能遇到的各种出错情况
- 代码中应认真处理各种出错情况,避免出现未处理的错误。
初始化变量
- 代码中应初始化所有变量,避免出现未定义行为。
数据一致性检查
- 代码中应进行数据一致性检查,确保数据的正确性。
严禁随意更改其它模块或系统的有关设置和配置
- 代码中严禁随意更改其他模块或系统的设置和配置,避免出现兼容性问题。
不能随意改变与其它模块的接口
- 代码中不能随意改变与其他模块的接口,避免出现兼容性问题。
系统接口
- 代码中应明确系统接口的使用规则,避免出现兼容性问题。
编程时,要防止差 1 错误
- 代码中应防止差 1 错误,避免出现逻辑错误。
操作符检查
- 代码中应进行操作符检查,确保操作符的正确使用。
分支语句写完整
- 代码中的分支语句应写完整,避免出现逻辑错误。
使用 return 语句
- 代码中应使用 return 语句,确保函数的正确返回。
不要滥用 goto 语句
- 代码中应避免滥用 goto 语句,避免出现逻辑混乱的情况。
其他
- 其他质量保证要求应根据具体情况进行调整,确保代码整体风格一致。
代码编辑、编译、审查
打开编译器的所有告警开关对程序进行编译
- 代码编译时应打开编译器的所有告警开关,确保代码的正确性。
在产品软件(项目组)中,要统一编译开关选项
- 产品软件中应统一编译开关选项,确保代码的一致性。
通过代码走读及审查方式对代码进行检查
- 代码应通过代码走读及审查方式进行检查,确保代码的质量。
测试部测试产品之前,应对代码进行抽查及评审
- 测试部测试产品之前,应对代码进行抽查及评审,确保代码的质量。
其他
- 其他代码编辑、编译、审查要求应根据具体情况进行调整,确保代码整体风格一致。
代码测试、维护
单元测试要求至少达到语句覆盖
- 单元测试应至少达到语句覆盖,确保代码的正确性。
单元测试开始要跟踪每一条语句,并观察数据流及变量的变化
- 单元测试开始时应跟踪每一条语句,并观察数据流及变量的变化,确保代码的正确性。
清理、整理或优化后的代码要经过审查及测试
- 清理、整理或优化后的代码应经过审查及测试,确保代码的质量。
代码版本升级要经过严格测试
- 代码版本升级应经过严格测试,确保版本的稳定性。
使用工具软件对代码版本进行维护
- 代码版本维护应使用工具软件,确保版本的稳定性。
正式版本上软件的任何修改都应有详细的文档记录
- 正式版本上软件的任何修改都应有详细的文档记录,确保版本的稳定性。
其他
- 其他代码测试、维护要求应根据具体情况进行调整,确保代码整体风格一致。
宏
用宏定义表达式时,要使用完备的括号
- 用宏定义表达式时,应使用完备的括号,确保表达式的正确性。
将宏所定义的多条表达式放在大括号中
- 将宏所定义的多条表达式放在大括号中,确保表达式的正确性。
使用宏时,不允许参数发生变化
- 使用宏时,不允许参数发生变化,确保表达式的正确性。
其他
- 其他宏定义要求应根据具体情况进行调整,确保代码整体风格一致。