华为软件编程要求规范

上传人:痛*** 文档编号:92392548 上传时间:2022-05-18 格式:DOC 页数:25 大小:120KB
收藏 版权申诉 举报 下载
华为软件编程要求规范_第1页
第1页 / 共25页
华为软件编程要求规范_第2页
第2页 / 共25页
华为软件编程要求规范_第3页
第3页 / 共25页
资源描述:

《华为软件编程要求规范》由会员分享,可在线阅读,更多相关《华为软件编程要求规范(25页珍藏版)》请在装配图网上搜索。

1、word文档编号产品版本受控状态DC-SB-2003-1005内部Page: 1密级可以选择以下几种: 无, 一般,内部,组内,秘密,绝密等。产品名称:软件编程规X共 页软件编程规X(仅供内部使用)世纪百合科技某某Beijing Centurial Lily Technology Co.,Ltd.所有不得复制文档修改记录版本号日期所改页注记提交人批准人目 录444444810143.附录:通用类型的公共定义1921 / 251. 引言1.1 目的本规X的目的在于增加源代码的可读性,减少程序员对代码理解上的偏差,使程序员能够编写出可靠的代码,降低代码维护本钱。1.2 X围本规X内容涉与X围包括:

2、文件、版面、注释、标识符、变量和结构、函数、宏以与可理解性等。本规X适用于公司开发的所有软件产品。在新软件的编码过程中本规X必须执行。2. 规X2.1 文件2.1.1 头文件的名称一律为小写,格式为“。例如:ipf_protocol.h等。2.1.2 头文件的格式如下: 注释头,格式参见软件编程规X; 头文件预编译开关开始,格式为:#ifndef 预编译开关#define 预编译开关其中预编译开关格式为:“_文件名_H,其中文件名一律大写 头文件内容; 头文件预编译开关完毕,格式为:#endif用来和头文件预编译开关的开始对应。例如:以下为ipf_ip.h头文件的内容:/*Copyright

3、(c) Lily Of The Century Technology Co., LTD.ALL RIGHTS RESERVEDDescription: / 用于详细说明此程序文件完成的主要功能*/#ifndef _IPF_IP_H#define _IPF_IP_H.#endif2.1.3 头文件的定义要有层次,禁止交叉引用。说明:头文件的层次设置为公共模块、私有模块。头文件的引用次序为下层头文件引用上层头文件、私有头文件引用公共头文件,声明结构时尤其要注意,不允许出现交叉引用的情况。示例:如下定义不符合规X/*Copyright (c) Lily Of The Century Technolo

4、gy Co., LTD.ALL RIGHTS RESERVEDDescription: 定义配置数据结构*/#ifndef _ISDN_A_H#define _ISDN_A_H#include “typedef struct.; ISDN_CONTROL stIsdnControl; .;ISDN_ CONFIG;#endif/*Copyright (c) Lily Of The Century Technology Co., LTD.ALL RIGHTS RESERVEDDescription: 定义控制数据结构*/#ifndef _ISDN_B_H#define _ISDN_B_H#inc

5、lude “typedef struct .; ISDN_CONFIG stIsdnConfig; .;ISDN_CONTROL;#endif为了解决上述矛盾,可以将两个结构合并到一个文件中声明。2.1.4 文件中如果引用系统头文件,必须使用“;如果引用自定义的头文件,必须使用“和“。说明:系统头文件是指由编译系统提供的头文件。示例:如下书写不符合规X。#include “#include 应该改作:#include #include “2.1.5 头文件中只能声明变量类型,禁止定义变量。说明:如果在头文件中定义变量,当有多个源文件引用该头文件时,会出现重复定义的错误。示例:如下头文件是不规X

6、的。/*Copyright (c) Lily Of The Century Technology Co., LTD.ALL RIGHTS RESERVEDDescription: 定义配置数据结构*/#ifndef _ISDN_A_H#define _ISDN_A_Htypedef struct .;ISDN_ CONFIG;ISDN_CONFIG g_stIsdnConfig;#endif 结构变量g_stIsdnConfig不能在头文件中定义,只能在源文件中定义。可以在相应的源文件定义后,头文件作如下改动:ISDN_CONFIG g_stIsdnConfig;改为extern ISDN_C

7、ONFIG g_stIsdnConfig;2.1.6 头文件的声明顺序,应该有层次感。说明:头文件的声明顺序一般是宏、结构、函数、变量。函数在头文件中声明时开头可以不加“extern2.1.7 源文件名称一律小写,格式为:子系统名_文件名.c,示例:ipf_ pkt.c表示在IPF子系统的包处理文件。2.1.8 源文件必须加注释头。源文件注释头格式为:/*Copyright (c) Lily Of The Century Technology Co.,LTD.ALL RIGHTS RESERVEDDescription: / 用于详细说明此程序文件完成的主要功能*/2.2 版面风格2.2.1

8、程序块采用缩进风格编写,缩进使用TAB符号,TAB符号规定为4个空格。变量说明之后必须加空行。说明:由开发工具自动生成的代码例外。示例:如下例子不符合规X。void isdn_InitConfig(void) WORD wConfigNumner; .; /program code应如下书写void isdn_InitConfig(void) WORD wConfigNumner; .; /program code2.2.2 不允许把多个短语句写在一行中,一行只写一条语句。示例:如下例子不符合规X。wLength = wWidth = 0;或wLength = 0, wWidth = 0;应如

9、下书写wLength = 0;wWidth = 0;禁止如下写法:int i = j = 0;或int i = 0,j = 0;应该写作:int i = 0;int j = 0;或int i,j;i = 0;j = 0;2.2.3 do、while、switch、case、default、if、else、for等语句自占一行,且if、else语句在同一列。 示例1:如下例子不符合规X。do .; /program code while (pstUser != NULL);应如下书写:do .; /program code while (pstUser != NULL);示例2:如下例子不符合规

10、X。while (pstUser != NULL) .; /program code应如下书写:while (pstUser != NULL) .; /program code示例3:如下例子不符合规X。switch (dwCounter) case 1: dwCounter+; .; /program code break; default:break;应如下书写:switch (dwCounter) case 1: dwCounter+; .; /program code break; default: break;示例4:如下例子不符合规X。if (pstUser = NULL) ret

11、urn;else .; /program code应如下书写:if (pstUser = NULL)return;else .; /program code示例5:如下例子不符合规X。for (i = 0;i 10;i+) .; /program code应如下书写:for (i = 0;i 4)& 0xF0)2.3.3 函数的命名为:前缀+下划线+字符串。其中前缀为全小写的子系统名称,字符串由一个或多个单词组成,每个单词首字母大写,其他字母小写。示例:void MsgCreate(void);void icmp_PktRecv(void);2.3.4 调试用的编译开关是开头为下划线的全大写字

12、符串,具体格式是:下划线+DEBUG+子系统名称+下划线+名称。示例:_DEBUG_IPF_IP_PACKET、_DEBUG_TCP_OPTION等。2.3.5 结构联合类型命名规如此为:子系统名称+下划线+结构名称、子系统名称+下划线+联合名称,其中所有字母大写。示例:typedef struct .;IP_TRACEROUTE;typedef union .;ICMP_PKT;2.3.6 全局变量命名的具体格式是:前缀+下划线+子系统名+下划线+字符串,其中前缀为小写的“g,子系统名称全部小写,字符串由一个或多个单词组成,每个单词首字母大写,其他字母小写。示例:g_icmp_TraceRo

13、uteQueue、g_ospf_InterfList等。2.3.7 消息宏定义的采用一下格式:前缀+下划线+字符串+下划线+后缀。其中前缀采用小写的“mm,字符串标记消息宏的具体含义,由一个或多个单词组成,每个单词首字母大写,其他字母小写,后缀为XXXtoYYY,表示消息的传送方向,XXX表示源子系统名,YYY为目的子系统名,全部用大写字母表示。示例:mm_AddRoute_BGPtoRTMGT表示从BGP协议发送到路由管理实体的增加一条路由的消息,mm_ShowIpRoute_CLItoRTMGT表示从CLI发送到路由管理子系统的要求显示路由表的消息。2.4 函数与宏2.4.1 对函数的返回

14、值要仔细、全面地处理。说明:对提供返回值的函数,尤其是接口函数,其返回值必须检查。示例:以下函数是不规X的。void isdn_SendMessage(void) .; /program code MsgPost(.); / 发送消息应该改作void isdn_SendMessage(void) INT32 iPost; .; /program code iPost = MsgPost(.); / 发送消息 if (iPost = OK) .; /处理代码else .; /处理代码2.4.2 接口函数的输入参数尤其是指针和数组下标、非输入参数的合法性必须检查。说明:函数的输入主要有两种:一种是

15、参数输入;另一种是非参数输入,包括全局变量、数据文件等,这些参数都需要作检查。示例:下函数的实现不符合规X。RESULT isdn_Receive(NI_CELL *pstCell,SK_BUF *pstSkBuf).; /接收数据代码return OK;应改作以下写法。RESULT isdn_Receive(NI_CELL *pstCell,SK_BUF *pstSkBuf)if (pstCell = NULL) | (pstSkBuf = NULL) return FALSE;.; /接收数据代码return OK;2.4.3 禁止把函数的参数作为工作变量。说明:需要做改变的参数,应该先用

16、局部变量代之,最后再将该局部变量的内容赋给该参数。示例:下函数的实现不符合规X。BOOLEAN isdn_SumData(WORD wNumber,WORD *pwData, WORD *pwSum) WORD wCount;if (pwData = NULL) | (pwSum = NULL) return FALSE; *pwSum = 0; for (wCount = 0; wCount wNumber; wCount+) *pwSum += pwDatawCount; / pwSum成了工作变量,不规Xreturn TRUE;应改作以下写法。BOOLEAN isdn_SumData(W

17、ORD wNumber,WORD *pwData, WORD *pwSum) WORD wCount; WORD wSumTemp;if (pwData = NULL) | (pwSum = NULL) return FALSE; wSumTemp = 0; for (wCount = 0; wCount b ? a : b#define MAX(a,b) (a b ? a : b)#define MAX(a,b) (a) (b) ? (a) : (b)正确的定义应为:#define MAX(a,b) (a) (b) ? (a) : (b)2.4.7 将宏所定义的多条表达式放在大括号中。示例:

18、下面的定义不规X#define ISDN_INIT_VALUE(a, b) a = 0; b = 0;正确的用法应为:#define ISDN_INIT_VALUE(a, b) a = 0; b = 0;2.4.8 使用宏时,不允许参数发生变化。示例:如下用法导致错误。#define MAX(a, b) (a) (b) ? (a) : (b)iResult = MAX(iRx+,iTx);将被预处理器解释为iResult = (iRx+) (iTx) ? (iRx+) : (iTx);此时如果输入iRx = 6;iTx = 5;代码执行结果iResult = 7,此时iRx为8。应该改作如下用

19、法:iResult = MAX(iRx,iTx);iRx+;2.5 代码的可靠性2.5.1 系统运行之初,要初始化所有本系统的全局变量,禁止未经初始化的全局变量被引用。说明:使用未初始化的数据,容易使系统进入混乱状态。示例:以下的全局变量如果没有在系统运行时初始化,在被函数使用时会出错ISDN_CELL *g_pstIsdnCellISDN_MAX_CELL_NUM;void isdn_ShowChannel(WORD wSlot,WORD wPort) ISDN_CELL *pstIsdnCell = 0; int i; for (i = 0; i wSlot = wSlot) & (pst

20、IsdnCell-wPort = wPort) break; .; /other program code2.5.2 申请内存之后,应该立即检查指针值是否为NULL?防止使用指针值为NULL的内存说明:申请内存时,如果申请失败,应该防止使用该指针。必须使用if(p=NULL) 或if(p!=NULL)进展防错处理。2.5.3 禁止将未被初始化的内存作为零值使用。说明:创建的数组或动态申请的内存,其初始值是不确定的,不能当作零处理。示例:以下代码是不规X的。void isdn_CheckIe(BYTE *pbyIe,WORD wIeLen) WORD wTempLen; /wTempLen未初始

21、化,其初始值不一定为0 while(wTempLen wIeLen) .; /other program code wTempLen += 2; 应作如下改写:void isdn_CheckIe(BYTE *pbyIe,WORD wIeLen) WORD wTempLen; wTempLen = 0; while (wTempLen MAX_LENGTH) return LENGTH_ERROR; / 忘了释放pbyBuf .; / other program code应改为如下。int ExampleFunction(BYTE byLen) BYTE *pbyBuf; pbyBuf = (B

22、YTE *)malloc(MAX_LENGTH); .; /program code, include check pBuf if or not NULL if (byLen MAX_LENGTH) free(pBuf); / 退出之前释放pbyBuf return LENGTH_ERROR; .; / other program code2.5.12 在switch的处理程序块中,必须有default语句;并且每个case语句都要有对应的break。说明:如果一个case下的处理语句需要调用下一个case的处理语句,可以将下一个case的处理语句copy过来。示例:以下写法是不规X的swit

23、ch (wEvent) case 1: isdn_SendEvent(wEvent); case 2: wEvent+; break; default: break;应该改为:switch (wEvent) case 1: isdn_SendEvent(wEvent); wEvent+; break; case 2: wEvent+; break; default: break;2.5.13 不要滥用goto语句。说明:goto语句会破坏程序的结构性,除非确实需要,不要使用goto语句。2.5.14 留心程序机器码大小如指令空间大小、数据空间大小、堆栈空间大小等是否超出系统有关限制。2.5.1

24、5 使用显式的数据类型转换,防止让编译器进展隐式的数据类型转换。说明:使用显示的数据转换一方面增加可读性,有利于代码的维护;另一方面防止隐式的数据类型转换引起的编译告警。示例:以下的书写不符合规XNI_CELL *isdn_Load(void) NI_CELL *pstNiCell;pstNiCell = malloc(sizeof(NI_CELL);.; /program codereturn pstNiCell;应改作:NI_CELL *isdn_Load(void) NI_CELL *pstNiCell;pstNiCell = (NI_CELL*)malloc(sizeof(NI_CEL

25、L);.; /program codereturn pstNiCell;2.5.16 不要使用难懂的技巧性很高的语句。说明:高技巧语句不等于高效率的程序,实际上程序的效率关键在于算法。示例:如下表达式,考虑不周就可能出问题,也较难理解。*pbyState + += 1;* + pbyState += 1;应分别改为如下。*pbyState += 1;pbyState +; / 此二语句功能相当于 * pbyState + += 1; + pbyState;*pbyState += 1; / 此二语句功能相当于 * + pbyState += 1; 3. 附录:通用类型的公共定义1、 常用数据类

26、型的定义typedef int INT32;typedef unsigned int UINT32;typedef short INT16;typedef unsigned short UINT16;typedef char INT8;typedef unsigned char UINT8;typedef signed long LONG;typedef unsigned long DWORD;typedef unsigned short WORD;typedef unsigned char BYTE;typedef unsigned char BOOLEAN;当使用无符号数时,应该优先使用BYTE、WORD、DWORD等宏定义。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!