⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 华为编程规范与范例.txt

📁 华为编程规范排版 6 2 注释 11 3 标识符命名 18 4 可读性 20 5 变量、结构 22 6 函数、过程 28
💻 TXT
📖 第 1 页 / 共 5 页
字号:

/* active statistic task number */ 

#define MAX_ACT_TASK_NUMBER 1000 

 





#define MAX_ACT_TASK_NUMBER 1000 /* active statistic task number */ 


12-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 No.7 network can not */ 

 /* transmission this message */ 

 N_UNITDATA_REQ, /* sccp user's unit data transmission request*/ 

}; 


12-11:全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及
存取时注意事项等的说明。 
示例: 

/* The ErrorCode when SCCP translate */ 

/* Global Title failure, as follows */ // 变量作用、含义 

/* 0 - SUCCESS 1 - GT Table error */ 

/* 2 - GT error Others - no use */ // 变量取值范围 

/* only function SCCPTranslate() in */ 

/* this modual can modify it, and other */ 

/* module can visit it through call */ 

/* the function GetGTTransErrorCode() */ // 使用方法 

BYTE g_GTTranErrorCode; 


12-12:注释与所描述内容进行同样的缩排。 
说明:可使程序排版整齐,并方便注释的阅读与理解。 

示例:如下例子,排版不整齐,阅读稍感不方便。 

void example_fun( void ) 

{ 

/* code one comments */ 

 CodeBlock One 





 

 /* code two comments */ 

 CodeBlock Two 

} 

 

应改为如下布局。 

void example_fun( void ) 

{ 

 /* code one comments */ 

 CodeBlock One 

 

 /* code two comments */ 

 CodeBlock Two 

} 


12-13:将注释与其上面的代码用空行隔开。 
示例:如下例子,显得代码过于紧凑。 

/* code one comments */ 

program code one 

/* code two comments */ 

program code two 

 

应如下书写 

/* code one comments */ 

program code one 

 

/* code two comments */ 

program code two 


12-14:对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。 
说明:这些语句往往是程序实现某一特定功能的关键,对于维护人员来说,良好的注释帮
助更好的理解程序,有时甚至优于看设计文档。 


12-15:对于switch语句下的case语句,如果因为特殊情况需要处理完一个case后进入下一
个case处理,必须在该case语句处理完、下一个case语句前加上明确的注释。 
说明:这样比较清楚程序编写者的意图,有效防止无故遗漏break语句。 





示例(注意斜体加粗部分): 

case CMD_UP: 

 ProcessUp(); 

 break; 

 

case CMD_DOWN: 

 ProcessDown(); 

 break; 

 

case CMD_FWD: 

 ProcessFwd(); 

 

if (...) 

{ 

 ... 

 break; 

} 

else 

{ 

 ProcessCFW_B(); // now jump into case CMD_A 

} 

 

case CMD_A: 

 ProcessA(); 

 break; 

 

case CMD_B: 

 ProcessB(); 

 break; 

 

case CMD_C: 

 ProcessC(); 

 break; 

 

case CMD_D: 

 ProcessD(); 





 break; 

... 


.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 (...) 

{ 

 // program code 

 

 while (index < MAX_INDEX) 

 { 

 // program code 

 } /* end of while (index < MAX_INDEX) */ // 指明该条while语句结

} /* end of if (...)*/ // 指明是哪条if语句结束 





.2-5:注释格式尽量统一,建议使用“/* …… */”。 
.2-6:注释应考虑程序易读及外观排版的因素,使用的语言若是中、英兼有的,建议多使用中
文,除非能用非常流利准确的英文表达。 
说明:注释语言不统一,影响程序易读性和外观排版,出于对维护人员的考虑,建议使用
中文。 





3 标识符命名 

13-1:标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的
缩写,避免使人产生误解。 
说明:较短的单词可通过去掉“元音”形成缩写;较长的单词可取单词的头几个字母形成
缩写;一些单词有大家公认的缩写。 

示例:如下单词的缩写能够被大家基本认可。 

temp 可缩写为 tmp ; 

flag 可缩写为 flg ; 

statistic 可缩写为 stat ; 

increment 可缩写为 inc ; 

message 可缩写为 msg ; 


13-2:命名中若使用特殊约定或缩写,则要有注释说明。 
说明:应该在源文件的开始之处,对文件中所使用的缩写或约定,特别是特殊的缩写,进
行必要的注释说明。 


13-3:自己特有的命名风格,要自始至终保持一致,不可来回变化。 
说明:个人的命名风格,在符合所在项目组或产品组的命名规则的前提下,才可使用。(即
命名规则中没有规定到的地方才可有个人命名风格)。 


13-4:对于变量命名,禁止取单个字符(如i、j、k...),建议除了要有具体含义外,还能
表明其变量类型、数据类型等,但i、j、k作局部循环变量是允许的。 
说明:变量,尤其是局部变量,如果用单个字符表示,很容易敲错(如i写成j),而编
译时又检查不出来,有可能为了这个小小的错误而花费大量的查错时间。 

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

int liv_Width 

其变量名解释如下: 

 l 局部变量(Local) (其它:g 全局变量(Global)...) 

 i 数据类型(Interger) 

 v 变量(Variable) (其它:c 常量(Const)...) 

 Width 变量含义 





这样可以防止局部变量与全局变量重名。 


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


.3-1:除非必要,不要用数字或较奇怪的字符来定义标识符。 
示例:如下命名,使人产生疑惑。 

#define _EXAMPLE_0_TEST_ 

#define _EXAMPLE_1_TEST_ 

void set_sls00( BYTE sls ); 

 

应改为有意义的单词命名 

#define _EXAMPLE_UNIT_TEST_ 

#define _EXAMPLE_ASSERT_TEST_ 

void set_udt_msg_sls( BYTE sls ); 


.3-2:在同一软件产品内,应规划好接口部分标识符(变量、结构、函数及常量)的命名,防
止编译、链接时产生冲突。 
说明:对接口部分的标识符应该有更严格限制,防止冲突。如可规定接口部分的变量与常
量之前加上“模块”标识等。 


.3-3:用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。 
说明:下面是一些在软件中常用的反义词组。 

add / remove begin / end create / destroy 

insert / delete first / last get / release 

increment / decrement put / get 

add / delete lock / unlock open / close 

min / max old / new start / stop 

next / previous source / target show / hide 

send / receive source / destination 

cut / paste up / down 

示例: 

int min_sum; 





int max_sum; 

int add_user( BYTE *user_name ); 

int delete_user( BYTE *user_name ); 


.3-4:除了编译开关/头文件等特殊应用,应避免使用_EXAMPLE_TEST_之类以下划线开始和
结尾的定义。 


 


4 可读性 

14-1:注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。 
说明:防止阅读程序时产生误解,防止因默认的优先级与设计思想不符而导致程序出错。 

示例:下列语句中的表达式 

word = (high << 8) | low (1) 

if ((a | b) && (a & c)) (2) 

if ((a | b) < (c & d)) (3) 

如果书写为 

high << 8 | low 

a | b && a & c 

a | b < c & d 

由于 

high << 8 | low = ( high << 8) | low, 

a | b && a & c = (a | b) && (a & c), 

(1)(2)不会出错,但语句不易理解; 

a | b < c & d = a | (b < c) & d,(3)造成了判断条件出错。 


14-2:避免使用不易理解的数字,用有意义的标识来替代。涉及物理状态或者含有物理意义的
常量,不应直接使用数字,必须用有意义的枚举或宏来代替。 
示例:如下的程序可读性差。 

if (Trunk[index].trunk_state == 0) 

{ 

 Trunk[index].trunk_state = 1; 

 ... // program code 

} 

 

应改为如下形式。 

#define TRUNK_IDLE 0 

#define TRUNK_BUSY 1 

 

if (Trunk[index].trunk_state == TRUNK_IDLE) 

{ 

 Trunk[index].trunk_state = TRUNK_BUSY; 





 ... // program code 

} 


.4-1:源程序中关系较为紧密的代码应尽可能相邻。 
说明:便于程序阅读和查找。 

示例:以下代码布局不太合理。 

rect.length = 10; 

char_poi = str; 

rect.width = 5; 

 

若按如下形式书写,可能更清晰一些。 

rect.length = 10; 

rect.width = 5; // 矩形的长与宽关系较密切,放在一起。 

char_poi = str; 


.4-2:不要使用难懂的技巧性很高的语句,除非很有必要时。 
说明:高技巧语句不等于高效率的程序,实际上程序的效率关键在于算法。 

示例:如下表达式,考虑不周就可能出问题,也较难理解。 

* stat_poi ++ += 1; 

 

* ++ stat_poi += 1; 

 

应分别改为如下。 

*stat_poi += 1; 

stat_poi++; // 此二语句功能相当于“ * stat_poi ++ += 1; ” 

 

++ stat_poi; 

*stat_poi += 1; // 此二语句功能相当于“ * ++ stat_poi += 1; ”





5 变量、结构 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -