华为软件编程规范

合集下载

华为C++语言通用编程规范

华为C++语言通用编程规范
我们推荐使用.h 作为头文件的后缀,这样头文件可以直接兼容 C 和 C++。 我们推 荐使用.cpp 作为实现文件的后缀,这样可以直接区分 C++代码,而不是 C 代码。
目前业界还有一些其他的后缀的表示方法:
• 头文件: .hh, .hpp, .hxx • cpp 文件:.cc, .cxx, .C
对于本文档,我们默认使用.h 和.cpp 作为后缀。
uint8_t
宽度恰为 8 的有/无符号整数类型
int16_t
uint16_t 宽度恰为 16 的有/无符号整数类型
int32_t
uint32_t 宽度恰为 32 的有/无符号整数类型
int64_t
uint64_t 宽度恰为 64 的有/无符号整数类型
intptr_t
uintptr_t 足以保存指针的有/无符号整数类型
// typedefs typedef std::map<std::string, UrlTableProperties*> PropertiesMap;
// enums enum UrlTableErrors { ...
对于命名空间的命名,建议全小写:
// namespace namespace osutils {
建议 2.2.2 C++文件名和类名保持一致
C++的头文件和 cpp 文件名和类名保持一致,使用下划线小写风格。
如下: - database_connection.h - database_connection.cpp
结构体,命名空间,枚举等定义的文件名类似。
函数命名
函数命名统一使用大驼峰风格,一般采用动词或者动宾结构。接口部分可加前缀, 如 XXX_函数名。

华为内部代码规范

华为内部代码规范

FileName: test.cpp
Author:
Version :
Description: // 模块描述
Date:
Version:
// 版本信息
Function List: // 主要函数及其功能
1. -------
History:
// 历史修改记录
<author> <time> <version > <desc>
包含在内。
/*************************************************
Copyright (C), 1988-1999, Huawei Tech. Co., Ltd.
File name:
// 文件名
Author:
Version:
Date: // 作者、版本及完成日期
n7stat_str_compare((BYTE *) & stat_object, (BYTE *) & (act_task_table[taskno].stat_object), sizeof (_STAT_OBJECT));
n7stat_flash_act_duration( stat_item, frame_id *STAT_TASK_CHECK_NUMBER + index, stat_object );
软件编程规范总则
&& (n7stat_stat_item_valid (stat_item)) && (act_task_table[taskno].result_data != 0));
1 排版
仅供内部使用 3

Java语言编程规范(华为公司)

Java语言编程规范(华为公司)

Java语言编程规范(华为公司)DKBA华为技术有限公司企业技术规范DKBAXXXX-2001.12代替(DKBA200106-003)Java语言编程规范2001-12-XX发布2001-12-XX实施华为技术有限公司发布VVVVVVV VVVVVVVVVVVX。

XVX.X VX.X VX.X VX.XVX.X 目次前言 .............................................................................. .. (3)1 范围112 规范性引用文件113 术语和定义114 排版规范124.1 规则121.*程序块要采用缩进风格编写,缩进12的空格数为4个。

122.*分界符(如大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。

在函数体的开始、类和接口的定义、以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。

133.*较长的语句、表达式或参数(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。

134.*不允许把多个短语句写在一行中,即一行只写一条语句5.*if, for, do, while, case,13switch, default 等语句自占一行,且if, for, do, while等语句的执行语句无论多少都要加括号{}。

6.*相对独立的程序块之间、变量说明13之后必须加空行。

7.*对齐只使用空格键,不使用TAB键。

14VVVVVVV VVVVVVVVVVVX。

XVX.X VX.X VX.X VX.XVX.X 8.*在两个以上的关键字、变量、常量14进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如.),后不应加空格。

华为流程规范分享

华为流程规范分享
持续集成提供产品质量的快速反馈保证随时拥有可工作的软件解决问题单源码checkin源码checkout自动编译链接自动发邮件编程规范检查代码静态检查自动单元测试代码格式化源码checkin源码打标签打包安装盘二进制文件配置文件帮助文件等包ftpcheckin自动部署自动验证自动发布源码管理编译测试部署随时随时每天一次每月一次发布版本发布人工自动工具自动工具自动工具生成品质度量报告自动工具支撑人工验证验证每周一次内部测试版本构建人工自动目录版本控制方面优秀实践敏捷研发流程优秀实践华为版本敏捷开发流程优秀实践1
生命周期 结束决策 评审
概念 计划
开发
生命
验证 发布 周期
TR1 TR2 TR3
TR4 TR5 TR4A
GA
TR6 LAUNCH
IPD的核心内容是以市场为导向的产 品开发,关注客户需求,另外IPD把 产品开发在公司内部也作为一项投资 来看待。
IPD流程需要建立了虚拟的投资决策 委员会(IPMT),对产品开发团队 (PDT)的活动在一些关键点上进 行决策,此外IPD所建立的产品开发 团是跨部门的,可以打破部门之间 的沟通壁垒,并给出了跨部门业务 流程指导跨部门团队运作。
每日站立会议的好处 增加团队凝聚力,产生积极的工作氛围 及时暴露风险和问题; 促进团队内成员的沟通和协调。
每日站立会议的关键要点
准时开始:按计划会议制定的时间地点开 会,形成团队成员的自然习惯;
高效会议:会议限时15分钟,每个人都保 持站立,依次发言,不讨论与会议三个主 题无关的事情(如技术解决方案等);
自动验证
随时 随时 每天一次
人工 自动工具 自动工具
验证
人工验证
每周一次 内部测试
人工

华为C++语言通用编程规范.pdf

华为C++语言通用编程规范.pdf
我们可以通过约束这些特性的使用,或者使用 C++的新特性,比如 variant(C++17), GSL 的 span,narrow_cast 等来解决这些问题,提高 C++代码的健壮性。
遵循 C++ ISO 标准
希望通过使用 ISO C++标准的特性来编写 C++代码,对于 ISO 标准中未定义的或者 编译器实现的特性要谨慎使用,对于 GCC 等编译器的提供的扩展特性也需要谨慎 使用,这些特性会导致代码的可移植性比较差。
保证静态类型安全
我们希望 C++应该是静态类型安全的,这样可以减少运行时的错误,提高代码的健 壮性。但是由于 C++的下面的特性存在,会破坏 C++静态类型安全,我们针对这部 分特性要仔细处理。 - unions 联合体 - 类型转换 cast - 缩窄转换 narrowing conversions - 类型退化 type decay - 范围错误 range errors - void*类型指针
• 通过 const 来保证数据的不变性,防止数据被无意修改。 • 通过 gsl::span 等来保证 char 数组不越界,而不是通过运行时的 length 检查。 • 通过 static_assert 来进行编译时检查。
使用命名空间来限定作用域
全局变量,全局常量和全局类型定义由于都属于全局作用域,在项目中,使用第三 方库中容易出现冲突。
注意:如果模块中需要使用相关的扩展特性来,那么尽可能将这些特性封装成独立 的接口,并且可以通过编译选项关闭或者编译这些特性。对于这些扩展特性的使用, 请模块制定特性编程指南来指导这些特性的使用。

第5章 华为软件编码规范

第5章 华为软件编码规范

(4)"->"、"."前后不加空格。 p->id = pid; // "->"指针前后不加空格 (5) if、for、while、switch等与后面的括号间应 加空格,使if等关键字更为突出、明显。
if (a >= b && c > d) 注意:一行程序以小于80字符为宜,不要写得过长。
2014年9月24日星期三 15
2014年9月24日星期三 14
(3)"!"、"~"、"++"、"--"、"&"(地址运算符)等 单目操作符前后不加空格。
*p = 'a'; // 内容操作"*"与内容之间 flag = !isEmpty; // 非操作"!"与内容之间 p = &mem; // 地址操作"&" 与内容之间 i++; // "++","--"与内容之间
〔二〕 ======[ 注释 ]=======
2014年9月24日星期三
16
¹ 2-1:一般情况下,源程序有效注释量 必须在20%以上
说明:注释的原则是有助于对程序的阅读理解, 在该加的地方都加了,注释不宜太多也不能太 少,注释语言必须准确、易懂、简洁。
2014年9月24日星期三
17
¹ 2-2:说明性文件(如头文件.h文件、.inc文件、.def文件、编译说 明文件.cfg等)头部应进行注释,注释必须列出:版权说明、版本 号、生成日期、作者、内容、功能、与其它文件的关系、修改日 志等,头文件的注释中还应有函数功能简要说明

华为软件编码规范

华为软件编码规范

华为软件编程规范和范例〔一〕=====[排版] ]=======.〔二〕======[注释]=======.〔三〕=====[标识符命名]=======.〔四〕=====[可读性]======.〔五〕=====[变量、结构]=====.〔六〕=====[函数、过程]=====.〔七〕=====[可测性]=====.〔八〕=====[程序效率]=====.〔九〕=====[质量保证]=====.〔十〕=====[代码编辑、编译、审查]=====.〔十一〕=====[代码测试、维护]=====.〔十二〕=====[宏]=====.〔一〕========[ 排版]========== ¹1-1:程序块要采用缩进风格编写,缩进的空格数为4个说明:对于由开发工具自动生成的代码可以有不一致。

¹1-2:相对独立的程序块之间、变量说明之后必须加空行示例:如下例子不符合规范。

Int ni;if (!valid_ni(ni)){... // program code}repssn_ind = ssn_data[index].repssn_index;repssn_ni = ssn_data[index].ni;应如下书写Int ni;if (!valid_ni(ni)){... // program code}repssn_ind = ssn_data[index].repssn_index;repssn_ni = ssn_data[index].ni;¹1-3:较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读示例:perm_count_msg.head.len = NO7_TO_STAT_PERM_COUNT_LEN+ STAT_SIZE_PER_FRAM * sizeof( _UL );act_task_table[frame_id * STAT_TASK_CHECK_NUMBER + index].occupied= stat_poi[index].occupied;act_task_table[taskno].duration_true_or_false= SYS_get_sccp_statistic_state( stat_item );report_or_not_flag = ((taskno < MAX_ACT_TASK_NUMBER)&& (n7stat_stat_item_valid (stat_item))&& (act_task_table[taskno].result_data != 0));¹1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首示例:if ((taskno < max_act_task_number)&& (n7stat_stat_item_valid (stat_item))){... // program code}for (i = 0, j = 0; (i < BufferKeyword[word_index].word_length)&& (j < NewKeyword.word_length); i++, j++){... // program code}for (i = 0, j = 0;(i < first_word_length) && (j < second_word_length);i++, j++){... // program code}¹1-5:若函数或过程中的参数较长,则要进行适当的划分示例:n7stat_str_compare((BYTE *) & stat_object,(BYTE *) & (act_task_table[taskno].stat_object),sizeof (_STAT_OBJECT));n7stat_flash_act_duration( stat_item, frame_id *STAT_TASK_CHECK_NUMBER+ index, stat_object );¹1-6:不允许把多个短语句写在一行中,即一行只写一条语句示例:如下例子不符合规范。

C_C++编程规范-华为标准-精

C_C++编程规范-华为标准-精
值范围及公共变量间的关系。 5-3:明确公共变量与操作此公共变量的函数或过
程的关系,如访问、修改及创建等。 5-4:当向公共变量传递数据时,要十分小心,防
止赋与不合理的值或越界等现象发生。 5-5:防止局部变量与公共变量同名。 5-6:严禁使用未经初始化的变量作为右值。
编程规范详解——函数、过程 处理。
1-11:在两个以上的关键字、变量、常量进行对等操作时,它们之间 的操作符之前、之后或者前后要加空格;进行非对等操作时,如果 是关系密切的立即操作符(如->),后不应加空格。
1-12: 程序结构清析,简单易懂,单个函数的程序行数不得超过100行。
编程规范详解——注释
2-1:一般情况下,源程序有效注释量必须在20%以上。 2-2:说明性文件(如头文件.h文件、.inc文件、.def文件、编译说明文件.cfg
编程规范详解——注释
2-9:对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在 声明时都必须加以注释,说明其物理含义。变量、常量、宏的注释应放在 其上方相邻位置或右方。
2-10:数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自 注释的,必须加以注释。对数据结构的注释应放在其上方相邻位置,不可 放在下面;对结构中的每个域的注释放在此域的右方。
后进入下一个case处理,必须在该case语句处理完、下一个case语句前加 上明确的注释。
编程规范详解——标识符的命名
3-1:标识符的命名要清晰、明了,有明确含义,同时使用完 整的单词或大家基本可以理解的缩写,避免使人产生误解。
3-2:命名中若使用特殊约定或缩写,则要有注释说明 3-3:自己特有的命名风格,要自始至终保持一致,不可来回
延用华为标准
C/C++编程规范

华为CC语言编程规范

华为CC语言编程规范

百度文库- 让每个人平等地提升自我目录1 排版 (2)4 可读性 (11)6 函数、过程 (13)7 可测性 (14)1 排版¹1-1:程序块要采用缩进风格编写,缩进的空格数为4个。

说明:对于由开发工具自动生成的代码可以有不一致。

¹1-2:相对独立的程序块之间、变量说明之后必须加空行。

示例:如下例子不符合规范。

if (!valid_ni(ni)){... epssn_index;repssn_ni = ssn_data[index].ni;应如下书写if (!valid_ni(ni)){... epssn_index;repssn_ni = ssn_data[index].ni;¹1-3:较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。

示例:= NO7_TO_STAT_PERM_COUNT_LEN+ STAT_SIZE_PER_FRAM * sizeof( _UL );act_task_table[frame_id * STAT_TASK_CHECK_NUMBER +index].occupied= stat_poi[index].occupied;act_task_table[taskno].duration_true_or_false= SYS_get_sccp_statistic_state( stat_item );report_or_not_flag = ((taskno < MAX_ACT_TASK_NUMBER)&& (n7stat_stat_item_valid (stat_item)) &&(act_task_table[taskno].result_data != 0));¹1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。

华为软件编程规范

华为软件编程规范

华为软件编程规范软件编程规范(仅供内部使用)北京世纪百合科技有限公司Beijing Centurial Lily Technology Co.,Ltd.版权所有不得复制文档修改记录目录1.引言 (4)1.1目的 (4)1.2范围 (4)2.规范 (4)2.1文件 (4)2.2版面风格 (4)2.3标识符命名 (9)2.4函数与宏 (11)2.5代码的可靠性 (14)3.附录:通用类型的公共定义 (19)1.引言1.1目的本规范的目的在于增加源代码的可读性,减少程序员对代码理解上的偏差,使程序员能够编写出可靠的代码,降低代码维护成本。

1.2范围本规范内容涉及范围包括:文件、版面、注释、标识符、变量和结构、函数、宏以及可理解性等。

本规范适用于公司开发的所有软件产品。

在新软件的编码过程中本规范必须执行。

2.规范2.1文件2.1.1头文件的名称一律为小写,格式为“子系统名_文件名.h”。

例如:ipf_protocol.h等。

2.1.2头文件的格式如下:注释头,格式参见软件编程规范;头文件预编译开关开始,格式为:#ifndef 预编译开关#define 预编译开关其中预编译开关格式为:“_文件名_H”,其中文件名一律大写头文件内容;头文件预编译开关结束,格式为:#endif用来和头文件预编译开关的开始对应。

例如:以下为ipf_ip.h头文件的内容:/********************************** **************************Copyright (c) Lily Of The Century Technology Co., LTD.ALL RIGHTS RESERVEDDescription: // 用于详细说明此程序文件完成的主要功能*********************************** **************************/#ifndef _IPF_IP_H#define _IPF_IP_H...<头文件正文>...#endif2.1.3头文件的定义要有层次,禁止交叉引用。

华为编程规范全PDF

华为编程规范全PDF

// 修改历史记录列表,每条修改记录应包括修改日期、修改
// 者及修改内容简述
1. Date:
Author:
Modification:
2. ... *************************************************/
¹2-3:源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、 主要函数及其功能、修改日志等。 示例:下面这段源文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包 含在内。
由于留空格所产生的清晰性是相对的,所以,在已经非常清晰的语句中没有必要再留空格, 如果语句已足够清晰则括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不 必加空格,因为在 C/C++语言中括号已经是最清晰的标志了。 在长语句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部不加空格。给操 作符留空格时不要连续留两个以上空格。 示例: (1) 逗号、分号只在后面加空格。 int a, b, c;
Version:
// 版本信息
Function List: // 主要函数及其功能
1. -------
History:
// 历史修改记录
<author> <time> <version > <desc>
David 96/10/12 1.0 build this moudle
***********************************************************/
for (i = 0, j = 0; (i < BufferKeyword[word_index].word_length) && (j < NewKeyword.word_length); i++, j++)

华为代码规范

华为代码规范

华为代码规范目录1 概述 (5)1.1 编写目的 (5)1.2 文档约定 (5)1.3 预期的读者和阅读建议 (5)1.4 参考文献 (5)2 排版要求 (5)2.1 程序块缩进 (5)2.2 程序块之间空行 (5)2.3 长语句和长表达式 (6)2.4 循环、判断等长表达式或语句 (7)2.5 长参数 (7)2.6 短语句 (8)2.7 条件、循环语句 (8)2.8 语句对齐 (8)2.9 函数、过程和结构等语句块 (9)2.10 程序块分界符 (9)2.11 操作符前后空格 (10)2.12 其他 (11)3 注释 (11)3.1 有效注释量 (11)3.2 公司标识 (11)3.3 说明性文件 (12)3.4 源文件头 (13)3.5 函数头部说明 (13)3.6 注释与代码一致 (14)3.7 注释内容 (14)3.8 注释缩写 (14)3.9 注释位置 (14)3.10 变量、常量注释 (15)3.11 数据结构的注释 (15)3.12 全局变量 (16)3.13 注释缩排 (16)3.14 注释与代码之间空行 (17)3.15 变量定义、分支语句 (17)3.16 其他 (19)4 标识符命名 (20)4.1 命名清晰 (20)4.2 特殊命名需注释 (21)4.3 命名风格保持一致 (21)4.4 变量命名 (21)4.5 命名规范与系统风格一致 (21)4.6 其他 (22)5 可读性 (23)5.1 运算符优先级 (23)5.2 避免直接使用数字作为标识符 (23)5.3 其他 (24)6 变量、结构 (25)6.1 公共变量 (25)6.2 公共变量说明 (25)6.3 公共变量访问说明 (25)6.4 公共变量赋值 (26)6.5 防止局部变量与公共变量同名。

(26)6.6 严禁使用未经初始化的变量作为右值。

(26)6.7 其他 (26)7 函数、过程 (34)7.1 对所调用函数的错误返回码要仔细、全面地处理。

华为编程规范

华为编程规范

华为编程规范华为编程规范是指在华为公司内部进行软件开发时所遵守的一套规范和标准,旨在提高代码的质量和可维护性。

下面是华为编程规范的主要内容。

一、命名规范:1. 变量和函数名应采用有意义的名称,尽量避免使用缩写或简写。

2. 变量名和函数名应使用小驼峰命名法,即首字母小写,后续单词首字母大写。

3. 常量名应使用大写字母和下划线,以增加可读性。

4. 类名应使用大驼峰命名法,即每个单词首字母大写。

5. 文件名应与其中的公共类名一致。

二、注释规范:1. 在每个函数的开头添加函数的功能说明,参数说明和返回值说明。

2. 在关键性代码部分添加注释,说明代码的逻辑。

3. 在需要修正或改进的代码部分添加TODO注释,以便后续修复。

三、代码风格:1. 缩进使用4个空格而不是Tab键。

2. 每行代码的长度不能超过80个字符。

3. 在二元操作符两边添加空格,例如 a + b。

4. 大括号应另起一行,不应与关键字在同一行。

5. 每个语句结束后都应该添加分号。

四、异常处理:1. 捕获异常时应尽量具体,不应捕获顶层异常。

2. 异常处理代码应与正常逻辑代码分离,以提高代码的可读性。

3. 异常处理代码块应添加注释,说明捕获的异常类型和处理的方法。

五、函数规范:1. 函数的长度应控制在100行以内,避免函数过长和复杂。

2. 函数的参数应尽量少,可以通过封装成结构体或类的方式来减少参数数量。

3. 函数应只完成一个功能,不应既完成数据处理又完成界面显示等功能。

六、代码复用:1. 尽量使用现有的类和框架来实现功能,避免重复造轮子。

2. 重复的代码应抽取成函数或方法来复用,提高代码的可维护性。

3. 提高代码的可移植性,使其可以在不同的平台和环境下复用。

七、测试规范:1. 添加单元测试用例,覆盖所有的代码分支,确保代码的正确性。

2. 针对不同的输入情况,测试代码的边界问题和异常情况。

3. 添加性能测试用例,确保代码在大数据量和高并发情况下的性能表现。

华为各平台技能要求

华为各平台技能要求

华为各平台技能要求说明:下面各平台级别及技能要求都是华为项目所需要的,未列出的级别及技能华为10年还没有需求。

J2EE平台三级计算机相关专业,本科三年以上本领域工作经验;技能要求:掌握J2EE架构;熟练掌握IBM WSAD 版本5.1以上或IBM RAD开发工具;熟练掌握Struts框架开发技术;熟练掌握Java 语言编程技术;熟悉UML语言,能够理解UML设计图;熟练掌握Oracle SQL开发与存储过程开发。

具有三年以上的Java开发经验,2年以上的基于J2EE技术规范的WEB开发经验二级计算机相关专业,本科两年以上或大专四年以上本领域工作经验;技能要求:掌握Java编程语言;了解J2EE架构;熟练掌握java script,html、Jsp、Servlet、JavaBean等web 开发技术;掌握标准SQL语言,有Oracle Sql开发经验。

了解UML语言;掌握IBM WSAD 版本5.1以上或IBM RAD开发工具或Eclipse开发工具;熟悉WEB/J2EE服务器的使用,可熟练配置使用Tomcat,Apache。

参与过系统的设计与开发工作,2年以上Java开发经验。

Net平台三级计算机相关专业,本科三年以上本领域工作经验,技能要求:除满足二级人员要求外,熟练掌握.Net开发框架,熟练掌握开发和C#开发;熟悉IIS服务器配置与管理;熟悉Web Service,精通XML文件的解析。

具有三年以上的.Net开发经验,1年以上的基于.Net 技术规范的WEB开发经验。

有能力解决项目组内重大问题、能指导设计开发二级计算机相关专业,本科两年以上或大专四年以上本领域工作经验,技能要求:掌握C#开发语言;熟悉.Net多层架构;熟练掌握java script,html、等web开发技术;有COM/COM+的开发经验;掌握标准SQL语言,有较好的基于Oracle或Sql Server的 Sql开发经验。

编码规范(华为)

编码规范(华为)

软件编程规范总则
1 排版
¹1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低 优先级操作符处划分新行,操作符放在新行之首。 示例: if ((taskno < max_act_task_number) && (n7stat_stat_item_valid (stat_item))) { ... // program code }
act_task_table[taskno].duration_true_or_false = SYS_get_sccp_statistic_state( stat_item );
report_or_not_flag = ((taskno < MAX_ACT_TASK_NUMBER)
仅供内部使用
2
Simpo PDF Merge and Split Unregistered Version -

6 11 18 20 22 28 36 40 44 50 52 53
Simpo PDF Merge and Split Unregistered Version -
软件编程规范总则
1 排版
1 排版
¹1-1:程序块要采用缩进风格编写,缩进的空格数为4个。 说明:对于由开发工具自动生成的代码可以有不一致。 ¹1-2:相对独立的程序块之间、变量说明之后必须加空行。 示例:如下例子不符合规范。 if (!valid_ni(ni)) { ... // program code } repssn_ind = ssn_data[index].repssn_index; repssn_ni = ssn_data[index].ni;
if (...) { ... // program code }

华为技术有限公司C++语言编程规范

华为技术有限公司C++语言编程规范

成研所:
陶永祥120482
李朝阳00117623
中软:
海思:
黄剑豪152126
孙学全00148680
网络:
IT:
张 伟118807
戴强51135
修订情 况
2012-03-19
华为机密,未经许可不得扩散 第2页,共57页
C++语言编程规范
内部公开
目录
0 说明 ...................................................... 5
0.1 前言 ...................................................................................................................................... 5 0.2 代码总体原则 ....................................................................................................................... 5 0.3 与C语言编程规范的关系 ...................................................................................................... 6 0.4 规范实施、解释....................................................................................................................6 0.5 术语定义...............................................................................................................................6

华为软件编程规范

华为软件编程规范

华为软件编程规范•全局函数、全局变量、宏、类型名、枚举名的命名,应当准确描述并全局唯一•在能够准确表达含义的前提下,局部变量,或结构体、联合体的成员变量,其命名应尽可能简短•LiteOS的对外API使用LOS_Module_Func的方式,如果有宾语采用前置的方式,比如:1.LOS_TaskCreate2.LOS_SwtmrStart3.LOS_SemPendkernel目录下内部模块间接口使用OsModuleFunc的方式,比如:1.OsTaskScan2.OsSwtmrStartarch目录需要给上层模块提供LowLevel接口,这部分接口采用ArchModuleFunc的方式。

其他情况可采用ModuleFunc的方式。

排版与格式•程序块采用缩进风格编写,使用空格而不是制表符('\t')进行缩进,每级缩进为4个空格•采用K&R风格作为大括号换行风格,即函数左大括号另起一行放行首,并独占一行,其他左大括号跟随语句放行末,右大括号独占一行,除非后面跟着同一语句的剩余部分,如if 语句的else/elseif或者分号,比如:1.struct MyType{//左大括号跟随语句放行末,前置1个空格2....3.};//右大括号后面紧跟分号1.int Foo(int a)2.{//函数左大括号独占一行,放行首3.if(a>0){//左大括号跟随语句放行末,前置1个空格4....5.}else{//右大括号、"else"、以及后续的左大括号均在同一行6....7.}//右大括号独占一行8....9.}•条件、循环语句使用大括号,比如:1.if(objectIsNotExist){//单行条件语句也加大括号2.return CreateNewObject();3.}1.while(condition){}//即使循环体是空,也应使用大括号1.while(condition){2.continue;//continue表示空逻辑,使用大括号3.}•case/default语句相对switch缩进一层,缩进风格如下:1.switch(var){2.case0://缩进一层3.DoSomething1();//缩进一层4.break;5.case1:6.DoSomething2();7.break;8.default:9.break;10.}•一行只写一条语句•一条语句不能过长,建议不超过120个字符,如不能缩短语句则需要分行写•换行时将操作符留在行末,新行进行同类对齐或缩进一层,比如:1.//假设下面第一行不满足行宽要求2.if(currentValue>MIN&&//换行后,布尔操作符放在行末3.currentValue<MAX){//与(&&)操作符的两个操作数同类对齐4.DoSomething();5....6.}1.//假设下面的函数调用不满足行宽要求,需要换行2.ReturnType result=FunctionName(paramName1,3.paramName2,4.paramName3);//保持与上方参数对齐1.ReturnType result=VeryVeryVeryLongFunctionName(//写入第1个参数后导致过长,直接换行2.paramName1,paramName2,paramName3);//换行后,4空格缩进一层1.//每行的参数代表一组相关性较强的数据结构,放在一行便于理解,此时可理解性优先于格式排版要求2.int result=DealWithStructLikeParams(left.x,left.y,//表示一组相关参数3.right.x,right.y);//表示另外一组相关参数•声明定义函数时,函数的返回类型以及其他修饰符,与函数名同行•指针类型"*"应该靠右跟随变量或者函数名,比如:1.int*p1;//Good:右跟随变量,和左边的类型隔了1个空格2.int*p2;//Bad:左跟随类型3.int*p3;//Bad:两边都没空格4.int*p4;//Bad:两边都有空格当"*"与变量或函数名之间有其他修饰符,无法跟随时,此时也不要跟随修饰符,比如:1.char*const VERSION="V100";//Good:当有const修饰符时,"*"两边都有空格2.int Foo(constchar*restrictp);//Good:当有restrict修饰符时,"*"两边都有空格•根据上下内容的相关程度,合理安排空行,但不要使用连续3个或更多空行•编译预处理的"#"统一放在行首,无需缩进。

华为软件编程低级错误:杂项模板

华为软件编程低级错误:杂项模板

m_wSerialID++等于0,但0有特殊含义,正常的序列号不允许为0。
【纠正措施】增加最小值检查,修改后代码如下:
m_wSerialID++;
If ( MIN_SERIAL_ID > m_wSerialID ) { m_wSerialID = MIN_SERIAL_ID; }
HUAWEI TECHNOLOGIES CO., LTD.
HUAWEI TECHNOLOGIES CO., LTD.
Huawei Confidential
整数溢出:整数上溢(1)
【问题描述】测试人员在测试流的读写时,先写入4294967295长度的数据, 然后写入少量数据.写入成功后, 从流中取数据,coredump 【问题定位】问题代码如下: int CBufferedStream::read(TString& v) { …… if(read(nDataLen) != 0) { return -1; } if (nDataLen + m_currReadPos > m_MaxDataSize) { /* nDataLen为4294967295,nDataLen + m_ currReadPos超出整数上限,成为负数,不会return -1 */ return -1; } v.assign((const Char*)m_pData+m_currReadPos, nDataLen);/* nDataLen为4294967295,内存访问越 界*/ } 【纠正措施】考虑到代码逻辑中m_currReadPos不可能大于m_MaxDataSize. 所以将加法表达式改成减法表 达式,从而避免了上溢:
/* 注:在父函数中判断OutArray[ParaNum]的值是否合法(必须在1-21范围内) */
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

华为软件编程规范Revised on November 25, 2020目录1 排版 62 注释113 标识符命名184 可读性205 变量、结构226 函数、过程287 可测性368 程序效率409 质量保证4410 代码编辑、编译、审查5011 代码测试、维护5212 宏531 排版¹1-1:程序块要采用缩进风格编写,缩进的空格数为4个。

说明:对于由开发工具自动生成的代码可以有不一致。

¹1-2:相对独立的程序块之间、变量说明之后必须加空行。

示例:如下例子不符合规范。

if (!valid_ni(ni)){... epssn_index;repssn_ni = ssn_data[index].ni;应如下书写if (!valid_ni(ni)){... epssn_index;repssn_ni = ssn_data[index].ni;¹1-3:较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。

示例:+ STAT_SIZE_PER_FRAM * sizeof( _UL );act_task_table[frame_id * STAT_TASK_CHECK_NUMBER + index].occupied= stat_poi[index].occupied;act_task_table[taskno].duration_true_or_false= SYS_get_sccp_statistic_state( stat_item );report_or_not_flag = ((taskno < MAX_ACT_TASK_NUMBER)&& (n7stat_stat_item_valid (stat_item))&& (act_task_table[taskno].result_data != 0));¹1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。

示例:if ((taskno < max_act_task_number)&& (n7stat_stat_item_valid (stat_item))){... ord_length)&& (j < ; i++, j++){... . tat_object),sizeof (_STAT_OBJECT));n7stat_flash_act_duration( stat_item, frame_id *STAT_TASK_CHECK_NUMBER+ index, stat_object );¹1-6:不允许把多个短语句写在一行中,即一行只写一条语句。

示例:如下例子不符合规范。

= 0; = 0;应如下书写= 0;= 0;¹1-7:if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加括号{}。

示例:如下例子不符合规范。

if (pUserCR == NULL) return;应如下书写:if (pUserCR == NULL){return;}¹1-8:对齐只使用空格键,不使用TAB键。

说明:以免用不同的编辑器阅读程序时,因TAB键所设置的空格数目不同而造成程序布局不整齐,不要使用BC作为编辑器合版本,因为BC会自动将8个空格变为一个TAB键,因此使用BC合入的版本大多会将缩进变乱。

¹1-9:函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。

¹1-10:程序块的分界符(如C/C++语言的大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。

在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。

示例:如下例子不符合规范。

for (...) {... .){... . .){... .){... . 前后不加空格。

¹p->id = pid; 文件、.inc文件、.def文件、编译说明文件.cfg等)头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。

示例:下面这段头文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。

/*************************************************Copyright (C), 1988-1999, Huawei Tech. Co., Ltd.File name: ....History: Date:Author:Modification:2. ...*************************************************/¹2-3:源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。

示例:下面这段源文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。

/******************************************************* *****Copyright (C), 1988-1999, Huawei Tech. Co., Ltd.FileName:Author: Version : Date:Description: -------History: 96/10/12epssn_index;repssn_ni = ssn_data[index].ni;例2:repssn_ind = ssn_data[index].repssn_index;repssn_ni = ssn_data[index].ni;/* get replicate sub system index and net indicator */ 应如下书写/* get replicate sub system index and net indicator */ repssn_ind = ssn_data[index].repssn_index;repssn_ni = ssn_data[index].ni;¹2-9:对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须加以注释,说明其物理含义。

变量、常量、宏的注释应放在其上方相邻位置或右方。

示例:/* active statistic task number */#define MAX_ACT_TASK_NUMBER 1000#define MAX_ACT_TASK_NUMBER 1000 /* active statistictask number */¹2-10:数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。

对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释放在此域的右方。

示例:可按如下形式说明枚举/数据/联合结构。

/* sccp interface with sccp user primitive message name */enum SCCP_USER_PRIMITIVE{N_UNITDATA_IND, /* sccp notify sccp user unit data come */N_NOTICE_IND, /* sccp notify user the network can not *//* transmission this message */N_UNITDATA_REQ, /* sccp user's unit datatransmission request*/};¹2-11:全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。

示例:/* The ErrorCode when SCCP translate *//* Global Title failure, as follows */ .){...break;}else{ProcessCFW_B(); .½2-1:避免在一行代码或表达式的中间插入注释。

说明:除非必要,不应在代码或表达中间插入注释,否则容易使代码可理解性变差。

½2-2:通过对函数或过程、变量、结构等正确的命名以及合理地组织代码的结构,使代码成为自注释的。

说明:清晰准确的函数、变量等的命名,可增加代码可读性,并减少不必要的注释。

½2-3:在代码的功能、意图层次上进行注释,提供有用、额外的信息。

说明:注释的目的是解释代码的目的、功能和采用的方法,提供代码以外的信息,帮助读者理解代码,防止没必要的重复注释信息。

示例:如下注释意义不大。

/* if receive_flag is TRUE */if (receive_flag)而如下的注释则给出了额外有用的信息。

/* if mtp receive a message from links */if (receive_flag)½2-4:在程序块的结束行右方加注释标记,以表明某程序块的结束。

说明:当代码段较长,特别是多重嵌套时,这样做可以使代码更清晰,更便于阅读。

示例:参见如下例子。

if (...){¹ .)*/ .),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i、j、k作局部循环变量是允许的。

说明:变量,尤其是局部变量,如果用单个字符表示,很容易敲错(如i写成j),而编译时又检查不出来,有可能为了这个小小的错误而花费大量的查错时间。

示例:下面所示的局部变量名的定义方法可以借鉴。

int liv_Width其变量名解释如下:l 局部变量(Local)(其它:g 全局变量(Global)...)i 数据类型(Interger)v 变量(Variable)(其它:c 常量(Const)...)Width 变量含义这样可以防止局部变量与全局变量重名。

¹3-5:命名规范必须与所使用的系统风格保持一致,并在同一项目中统一,比如采用UNIX的全小写加下划线的风格或大小写混排的方式,不要使用大小写与下划线混排的方式,用作特殊标识如标识成员变量或全局变量的m_和g_,其后加上大小写混排的方式是允许的。

相关文档
最新文档