嵌入式软件的编程要求规范Word文档格式.docx
- 文档编号:1370895
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:53
- 大小:86.06KB
嵌入式软件的编程要求规范Word文档格式.docx
《嵌入式软件的编程要求规范Word文档格式.docx》由会员分享,可在线阅读,更多相关《嵌入式软件的编程要求规范Word文档格式.docx(53页珍藏版)》请在冰点文库上搜索。
●【规如此22】相对独立的程序块之间、变量说明之后必须加空行。
示例:
不正确的书写方式:
if(!
rpr_valid_ni(ni))
{
...//programcode
}
gRprRepssnInd
=gRprSsnData[idx].repssn_index;
gRprRepssnNi=gRprSsnData[idx].ni;
正确的书写方式:
//空行
gRprRepssnInd
●【规如此23】较长的语句〔>
80字符〕要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进展适当的缩进,使排版整齐,语句可读。
gRprPermCountMsg.head.len=RPR_NO7_TO_STAT_PERM_COUNT_LEN+
RPR_STAT_SIZE_PER_FRAM*sizeof(UINT32);
gSysAcbTaskTable[frame_id*RPR_STAT_TASK_CHECK_NUMBER+index].nOccupied=
rprStatPoi[index].nOccupied;
gSysAcbTaskTable[taskno].nDurationTrueOrFalse=
SYS_getSccpStatisticState(statItem);
gRprReportOrNotFlag=((SYS_MAX_ACT_TASK_NUMBER>
taskno)&
&
(SYS_n7statStatItemValid(statItem))&
(0!
=gSYSActTaskTable[taskno].resultData));
●【规如此24】循环、判断等语句中假设有较长的表达式或语句,如此要进展适当的分行,长表达式要在低优先级操作符处划分新行,操作符放在行尾。
if((taskno<
gSysMaxActTaskNumber)&
(SYS_n7statStatItemValid(statItem)))
for(i=0,j=0;
(i<
rprBufferKeyword[wordIndex].nWordLength)&
(j<
rprNewKeyword.nWordLength);
i++,j++)
rprFirstWordLength)&
(j<
rprSecondWordLength);
...//programcode
●【规如此25】假设函数的参数较长,如此要进展适当的分行。
rpr_n7statStrpare((UINT8*)&
statObject,
(UINT8*)&
(gSysActTaskTable[taskno].statObject),
sizeof(SYS_STAT_OBJECT));
rpr_n7statFlashActDuration(statItem,frameId*SYS_STAT_TASK_CHECK_NUMBER
+index,statObject);
●【规如此26】不允许把多个短语句写在一行中,即一行只写一条语句。
rect.nLength=0;
rect.nWidth=0;
正确的书写方式:
rect.nWidth=0;
●【规如此27】if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句局部无论多少都要加括号{}。
if(pUserCR==NULL)return;
if(NULL==pUserCR)
return;
●【规如此28】在比拟表达式中,如果有常量,尽量把常量放在前面。
[建议]
这样,万一不小心把“==〞误敲成“=〞,就会通不过翻译,不致引起难查的问题。
●【规如此29】程序块的分界符〔如C/C++语言的大括号‘{’和‘}’〕应各独占一行并且位于同一列,同时与引用它们的语句左对齐。
在函数体的开始、类的定义、结构的定义、枚举的定义以与if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。
本规如此的特例见2-7的说明局部。
for(...){
if(...)
{
}
voidexample_fun(void)
for(...)
switch(var)
caseOPTION1:
break;
caseOPTION2:
if(CONDITION<
a)
/*code*/
default:
●【规如此210】在两个以上的关键字、变量、常量进展对等操作时,它们之间的操作符之前、之后或者前后要加空格;
进展非对等操作时,如果是关系密切的立即操作符〔如->
〕,后不应加空格。
说明:
采用这种松散方式编写代码的目的是使代码更加清晰。
由于留空格所产生的清晰性是相对的,所以,在已经非常清晰的语句中没有必要再留空格,如果语句已足够清晰如此括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为在C/C++语言中括号已经是最清晰的标志了。
在长语句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部不加空格。
给操作符留空格时不要连续留两个以上空格。
【规如此210-1】逗号、分号只在后面加空格。
inta,b,c;
【规如此210-2】比拟操作符,赋值操作符"
="
、"
+="
,算术操作符"
+"
、"
%"
,逻辑操作符"
"
,位域操作符"
<
^"
等双目操作符的前后加空格。
if(currentTime>
=MAX_TIME_VALUE)
a=b+c;
a*=2;
a=b^2;
【规如此210-3】"
!
~"
++"
--"
〔地址运算符〕等单目操作符前后不加空格。
*p='
a'
;
//内容操作"
*"
与内容之间
flag=!
isEmpty;
//非操作"
p=&
mem;
//地址操作"
与内容之间
i++;
//"
"
【规如此210-4】"
->
."
前后不加空格。
p->
id=pid;
指针前后不加空格
【规如此210-5】if、for、while、switch等与后面的括号间应加空格,使if等关键字更为突出、明显。
if((a>
=b)&
(c>
d))
3注释
●【规如此31】一般情况下,源程序有效注释量必须在20%以上(建议20-30%)。
注释的原如此是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。
●【规如此32】C代码不得使用C++的注释语法“//〞,必须使用/*….*/。
注:
●【规如此33】说明性文件〔如头文件.h文件、.inc文件、.def文件、编译说明文件.cfg等〕头部应进展注释,注释必须列出:
说明、模块名、文件名、作者、内容介绍、修改日志等,头文件的注释中还应有函数功能简要说明。
头文件模板示例:
/***********************************************************************
*
*(c)Copyright2001-2016,TRZN,AllRightsReserved.
*THISISUNPUBLISHEDPROPRIETARYSOURCECODEOFTRZN,INC.
*Thecopyrightnoticeabovedoesnotevidenceanyactualorintended
*publicationofsuchsourcecode.
*Subsystem:
XXX
*File:
XXX_ei.h
*Author:
Xxx
*Description:
TemplateforCheaderfiles.
*//其它在头文件可选择的包括的内容
*Others:
//其它内容的说明
*FunctionList:
//主要函数列表,每个函数一行,包含其返回值类型与参数类型。
功能说明应当放在函数头注释中
*1.....
*History:
//修改历史记录列表,每条修改记录应包括修改日期、修改
*//者与修改内容简述。
(参见底注)
*1.Date:
*Author:
*Modification:
*2....
*
*********************************************************************/
#ifndef_FILENAME_H
#define_FILENAME_H
//programcode
#endif/*_FILENAME_H*/
【规如此33-1】注:
使用git在mit代码时填写充分、准确的message。
【规如此33-2】为了防止头文件被重复引用,应当用#ifndef/#define/#endif结构产生预处理块。
【规如此33-3】用#include<
filename.h>
格式来引用标准库的头文件〔编译器将从标准库开始搜索〕。
【规如此33-4】用#include“filename.h〞格式来引用非标准库的头文件〔编译器将从用户的工作开始搜索〕。
【规如此33-5】头文件中只存放“声明〞而不存放“定义〞。
(建议将成员函数的定义与声明分开,不论该函数体有多么小。
)[必须]
●【规如此34】源文件头部应进展注释,列出:
说明、版本号、作者、模块目的/功能、主要函数与其功能、修改日志等。
源文件模板示例:
/******************************************************************
*(c)Copyright2001-2005,TRZN,AllRightsReserved.
XXX_config.c
Xxxxx
TemplateforCsourcefiles.
*//可选择的增加局部内容
//主要函数列表,每个函数一行,包含其返回值类型与参数类型。
*
***************************************************************/
/*说明:
Description一项描述本文件的内容、功能、内部各局部之间的关系与本文件与其它文件关系等。
History是修改历史记录列表,每条修改记录应包括修改日期、修改者与修改内容简述。
*/
#include"
xxxxxx.h"
/********************************************************************
*FunctionName:
XXX_Func1
*Input:
Param1-meaning;
*Param2-meaning;
*Output:
Ifthere'
snoparametersforoutput,thisfieldcanbe
*"
None"
oromitted.
*Returns:
OK,ERROR
ThisisanexternalfunctionofXXX.
**********************************************************************/
STATUSXXX_Func1(UINT8Param1,UINT32Param2)
【规如此34-1】注:
●【规如此35】函数头部应进展注释,列出:
函数的目的/功能、输入参数、输出参数、返回值、调用关系〔函数、表〕等。
函数注释模板示例:
/****************************************************************************
XXX_ExternalFunc1
Performsxxxfunctions.
*Note:
Anyspecialnote.Thiscanbeomitted.
*//其它可选择的函数头说明
*Calls:
//被本函数调用的函数清单
*CalledBy:
//调用本函数的函数清单
*TableAccessed:
//被访问的表〔此项仅对于牵扯到数据库操作的程序〕
*TableUpdated:
//被修改的表〔此项仅对于牵扯到数据库操作的程序〕
//其它说明
***************************************************************************/
STATUSXXX_ExternalFunc1(UINT8Param1,UINT32Param2);
【规如此35-1】外部函数必须有函数头注释。
【规如此35-2】内部函数强烈建议使用函数头注释。
●【规如此36】边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。
不再有用的注释要删除。
注释的格式尽量统一。
单行注释
/*Createaoneshottimer,fromnow.*/
多行注释
/*OneormoretablesoflteDevDescrstructuresmustalsobedefinedforeach
boardtypeintothedynamically-loadedboard-specificconfigurationfile.
Thedevicedescriptorprovidesfunctionpointersthatgivestandard
lineterminationequipmentAPIaccesstoaspecifichardwaredriver.*/
●【规如此37】注释的内容要清楚、明了,含义准确,防止注释二义性。
错误的注释不但无益反而有害。
●【规如此38】防止在注释中使用缩写,特别是非常用缩写。
在使用缩写时或之前,应对缩写进展必要的说明。
●【规如此39】注释应与其描述的代码相近,对代码的注释应放在其上方或右方〔对单条语句的注释〕相邻位置,不可放在下面;
如放于上方如此需与其上面的代码用空行隔开。
如下例子不符合规X。
例1(错):
/*getreplicatesubsystemindexandnetindicator*/
rprRepssnInd=rprSsnData[index].nRepssnIndex;
rprRepssnNi=rprSsnData[index].ni;
例2(错):
应如下书写
●【规如此310】对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须加以注释,说明其物理含义。
变量、常量、宏的注释应放在其上方相邻位置或右方。
示例1:
/*activestatistictasknumber*/
#defineSYS_MAX_ACT_TASK_NUMBER1000
示例2:
#defineSYS_MAX_ACT_TASK_NUMBER1000/*activestatistictasknumber*/
●【规如此311】数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。
对数据结构的注释应放在其上方相邻位置,不可放在下面;
对结构中的每个域的注释放在此域的右方。
可按如下形式说明枚举/数据/联合结构。
/*sccpinterfacewithsccpuserprimitivemessagename*/
typedefenumSCP_USER_PRIMITIVE_t
SCP_UNITDATA_IND,/*sccpnotifysccpuserunitdatae*/
SCP_NOTICE_IND,/*SccpnotifyusertheNo.7networkcannot
transmissionthismessage*/
SCP_UNITDATA_REQ,/*sccpuser'
sunitdatatransmissionrequest*/
}SCP_USER_PRIMITIVE_T;
●【规如此312】全局变量要有较详细的注释,包括对其功能、取值X围、哪些函数或过程存取它以与存取时须知事项等的说明。
/*TheErrorCodewhenSCCPtranslate
GlobalTitlefailure,asfollows
0-SUCCESS
1-GTTableerror
2-GTerror
Others-notused
OnlyfunctionSCCP_Translate()in
thismodualcanmodifyit,andother
modulecanvisititthroughcall
thefunctionSCCP_GetGTTransErrorCode()*/
UINT8gGTTranErrorCode;
●【规如此313】代码中的特殊处理,或者软件改变方案,必须加注释,注明为何要这样做。
只有加了注释,以后的维护者才有可能明白前因后果。
●【规如此314】注释与所描述内容进展同样的缩排。
[必须
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 软件 编程 要求 规范