华为CC语言编程规范文档格式.docx
《华为CC语言编程规范文档格式.docx》由会员分享,可在线阅读,更多相关《华为CC语言编程规范文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
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:
循环、判定等语句中如有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。
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;
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,HuaweiTech.Co.,Ltd.
Filename:
....
History:
Date:
Author:
Modification:
2....
*************************************************/
2-3:
源文件头部应进行注释,列出:
版权说明、版本号、生成日期、作者、模块目的/功能、要紧函数及其功能、修改日记等。
下面这段源文件的头注释比较标准,固然,并非局限于此格式,但上述信息建议要包括在内。
/************************************************************
FileName:
Version:
Description:
-------
epssn_index;
例2:
repssn_ind=ssn_data[index].repssn_index;
/*getreplicatesubsystemindexandnetindicator*/
2-9:
关于所有有物理含义的变量、常量,若是其命名不是充分自注释的,在声明时都必需加以注释,说明其物理含义。
变量、常量、宏的注释应放在其上方相邻位置或右方。
/*activestatistictasknumber*/
#defineMAX_ACT_TASK_NUMBER1000
#defineMAX_ACT_TASK_NUMBER1000/*activestatistictasknumber*/
2-10:
数据结构声明(包括数组、结构、类、列举等),若是其命名不是充分自注释的,必需加以注释。
对数据结构的注释应放在其上方相邻位置,不可放在下面;
对结构中的每一个域的注释放在此域的右方。
可按如下形式说明列举/数据/联合结构。
/*sccpinterfacewithsccpuserprimitivemessagename*/
enumSCCP_USER_PRIMITIVE
N_UNITDATA_IND,/*sccpnotifysccpuserunitdatacome*/
N_NOTICE_IND,/*sccpnotifyuserthenetworkcannot*/
/*transmissionthismessage*/
N_UNITDATA_REQ,/*sccpuser'
sunitdatatransmissionrequest*/
};
2-11:
全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或进程存取它和存取时注意事项等的说明。
/*TheErrorCodewhenSCCPtranslate*/
/*GlobalTitlefailure,asfollows*/.)
...
break;
else
ProcessCFW_B();
.
½
2-1:
幸免在一行代码或表达式的中间插入注释。
除非必要,不该在代码或表达中间插入注释,不然容易使代码可明白得性变差。
2-2:
通过对函数或进程、变量、结构等正确的命名和合理地组织代码的结构,使代码成为自注释的。
清楚准确的函数、变量等的命名,可增加代码可读性,并减少没必要要的注释。
在代码的功能、用意层次上进行注释,提供有效、额外的信息。
注释的目的是说明代码的目的、功能和采纳的方式,提供代码之外的信息,帮忙读者明白得代码,避免没必要的重复注释信息。
如下注释意义不大。
/*ifreceive_flagisTRUE*/
if(receive_flag)
而如下的注释则给出了额外有效的信息。
/*ifmtpreceiveamessagefromlinks*/
2-4:
在程序块的终止行右方加注释标记,以表明某程序块的终止。
今世码段较长,专门是多重嵌套时,如此做能够使代码更清楚,更便于阅读。
参见如下例子。
if(...)
.)*/.),建议除要有具体含义外,还能表明其变量类型、数据类型等,但i、j、k作局部循环变量是许诺的。
变量,尤其是局部变量,若是用单个字符表示,很容易敲错(如i写成j),而编译时又检查不出来,有可能为了那个小小的错误而花费大量的查错时刻。
下面所示的局部变量名的概念方式能够借鉴。
intliv_Width
其变量名说明如下:
l局部变量(Local)(其它:
g全局变量(Global)...)
i数据类型(Interger)
v变量(Variable)(其它:
c常量(Const)...)
Width变量含义
如此能够避免局部变量与全局变量重名。
3-5:
命名规范必需与所利用的系统风格维持一致,并在同一项目中统一,比如采纳UNIX的全小写加下划线的风格或大小写混排的方式,不要利用大小写与下划线混排的方式,用作特殊标识如标识成员变量或全局变量的m_和g_,其后加上大小写混排的方式是许诺的。
Add_User不许诺,add_user、AddUser、m_AddUser许诺。
3-1:
除非必要,不要用数字或较奇怪的字符来概念标识符。
如下命名,令人产生疑惑。
#define_EXAMPLE_0_TEST_
#define_EXAMPLE_1_TEST_
voidset_sls00(BYTEsls);
应改成成心义的单词命名
#define_EXAMPLE_UNIT_TEST_
#define_EXAMPLE_ASSERT_TEST_
voidset_udt_msg_sls(BYTEsls);
3-2:
在同一软件产品内,应计划好接口部份标识符(变量、结构、函数及常量)的命名,避免编译、链接时产生冲突。
对接口部份的标识符应该有更严格限制,避免冲突。
如可规定接口部份的变量与常量之前加上“模块”标识等。
3-3:
用正确的反义词组命名具有互斥意义