《华为软件编程规范》由会员分享,可在线阅读,更多相关《华为软件编程规范(23页珍藏版)》请在金锄头文库上搜索。
1、文档编号产品版本受控状态DC-SB-2003-1005V 1.0内部产品名称:软件编程规范共页软件编程规范(仅供内部使用)北京世纪百合科技有限公司Beijing Centurial Lily Technology Co.,Ltd.版权所有不得复制文档修改记录版本号日期所改页注记提交人批准人1. 引言 41.1 目的 41.2 范围 42. 规范 42.1 文件 42.2 版面风格 82.3 标识符命名 122.4 函数与宏 142.5 代码的可靠性 183. 附录:通用类型的公共定义 231. 引言1.1 目的本规范的目的在于增加源代码的可读性,减少程序员对代码理解上的偏差, 使程序员能够编写
2、出可靠的代码,降低代码维护成本。1.2 范围本规范内容涉及范围包括:文件、版面、注释、标识符、变量和结构、函数、宏以及可理解性等。本规范适用于公司开发的所有软件产品。在新软件的编 码过程中本规范必须执行。2. 规范2.1 文件2.1.1 头文件的名称一律为小写,格式为“子系统名_文件名.h ”。例如:ipf_protocol.h 等。2.1.2 头文件的格式如下:? 注释头,格式参见软件编程规范;? 头文件预编译开关开始,格式为:#ifndef 预编译开关#define 预编译开关其中预编译开关格式为: _文件名_H,其中文件名一律大写? 头文件内容;? 头文件预编译开关结束,格式为:#end
3、if用来和头文件预编译开关的开始对应。例如:以下为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 头文件的定义要有层次,禁止交叉引用。说明:头文件的层次设置为公共模块、私有模块。头文件的引用次序为下层头文件引用上层头文件、私有头文件引用公共头文件,声明结构时尤其要注意,不允许出现交叉引用的情况。示例:如下
4、定义不符合规范头文件 isdn_a.h/*Copyright (c) Lily Of The Century Technology Co., LTD.ALL RIGHTS RESERVEDDescription:定义配置数据结构*/#ifndef _ISDN_A_H#define _ISDN_A_H#include“isdn_b.h”typedef struct.;ISDN_CONTROL stIsdnControl;.;ISDN_ CONFIG;#endif头文件 isdn_b.hCopyright (c) Lily Of The Century Technology Co., LTD.AL
5、L RIGHTS RESERVEDDescription:定义控制数据结构*/#ifndef _ISDN_B_H#define _ISDN_B_H#include“isdn_a.h”typedef struct.;ISDN_CONFIG stIsdnConfig;.;ISDN_CONTROL;#endif为了解决上述矛盾,可以将两个结构合并到一个文件中声明。2.1.4 文件中如果引用系统头文件,必须使用“ “;如果引用自定义的头文件,必须使用“”“和“”“。说明:系统头文件是指由编译系统提供的头文件。示例:如下书写不符合规范。#include“stdlib.h”#include 应该改作:#i
6、nclude #include“isdn_config.h”2.1.5 头文件中只能声明变量类型,禁止定义变量。说明:如果在头文件中定义变量,当有多个源文件引用该头文件时,会出现重复定义的错误。示例:如下头文件是不规范的。头文件 isdn_a.hCopyright (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_stIsd
7、nConfig;#endif结构变量 g_stIsdnConfig 不能在头文件中定义,只能在源文件中定义。可以在相应的源文件定义后,头文件作如下改动:ISDN_CONFIG g_stIsdnConfig; 改为extern ISDN_CONFIG g_stIsdnConfig;2.1.6 头文件的声明顺序,应该有层次感。说明:头文件的声明顺序一般是宏、结构、函数、变量。函数在头文件中声明时开头可以不加“ extern ”2.1.7 源文件名称一律小写,格式为:子系统名_文件名.c ,示例:ipf_ pkt.c表示在 IPF 子系统的包处理文件。2.1.8 源文件必须加注释头。源文件注释头格式
8、为:/*Copyright (c) Lily Of The Century Technology Co.,LTD.ALL RIGHTS RESERVEDDescription: /用于详细说明此程序文件完成的主要功能*2.2 版面风格2.2.1 程序块采用缩进风格编写,缩进使用 TAB 符号, TAB 符号规定为 4 个空 格。变量说明之后必须加空行。说明:由开发工具自动生成的代码例外。示例:如下例子不符合规范。void isdn_InitConfig(void)WORD wConfigNumner;.; /program code应如下书写void isdn_InitConfig(void)
9、WORD wConfigNumner;.; /program code2.2.2 不允许把多个短语句写在一行中,一行只写一条语句。示例:如下例子不符合规范。wLength = wWidth = 0;或 wLength = 0, wWidth = 0;应如下书写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 等语
10、句自占一行, 且 if 、 else 语句在同一列。示例 1:如下例子不符合规范。do .; /program code while (pstUser != NULL);应如下书写:do.; /program code while (pstUser != NULL);示例2:如下例子不符合规范。while (pstUser != NULL) .; /program code应如下书写:while (pstUser != NULL).; /program code示例3:如下例子不符合规范。switch (dwCounter) case 1: dwCounter+;.; /program cod
11、e break;default:break;应如下书写:switch (dwCounter)case 1:dwCounter+;.; /program code break;default:break;示例4:如下例子不符合规范。if (pstUser = NULL) return; else .; /program code应如下书写:if (pstUser = NULL)return;else.; /program code示例5:如下例子不符合规范。for (i = 0;i 10;i+) .; /program code应如下书写:for (i = 0;i 10;i+).; /program code2.2.4 函数的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风 格。示例:如下例子不符合规范。int isdn_Config(void).; / program codereturn 0;应该改为int isdn_Config(void).; / program codereturn 0;示例:如下例子不符合规范。typedef structWORD wSlot;WORD wPort;ISDN_CONFIG;应该改为typedef structWORD wSlot;WORD wP