/* 获得系统指针和网络指针的副本 */
nRepssnInd = SsnData[ index ].nRepssnIndex ;
nRepssnNi = SsnData[ index ].ni ;
例子2
nRepssnInd = SsnData[ index ].nRepssnIndex ;
nRepssnNi = SsnData[ index ].ni ;
/*获得系统指针和网络指针的副本 */
应如下书写
/*获得系统指针和网络指针的副本 */
nRepssnInd = SsnData[ index ].nRepssnIndex ;
nRepssnNi = SsnData[ index ].ni ;
<规则3> 对于所有的常量,变量,数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,在声明时都必须加以注释,说明其含义。
示例:
/* 活动任务的数量 */
#define MAX_ACT_TASK_NUMBER 1000
#define MAX_ACT_TASK_NUMBER 1000 /*活动任务的数量 */
/* 带原始用户信息的SCCP接口 */
enum SCCP_USER_PRIMITIVE
{
N_UNITDATA_IND , /* 向SCCP用户报告单元数据已经到达 */
N_UNITDATA_REQ , /* SCCP用户的单元数据发送请求 */
} ;
<规则4> 头文件、源文件的头部,应进行注释。注释必须列出:文件名、作者、目的、功能、修改日志等。
例如:
/*********************************************
文件名:
编写者:
编写日期:
简要描述:
修改记录:
********************************************/
说明:简要描述一项描述本文件的目的和功能等。修改记录是修改日志列表,每条修改记录应包括修改日期、修改者及修改内容简述。
<规则5> 函数头部应进行注释,列出:函数的目的、功能、输入参数、输出参数、修改日志等。
形式如下:
/*************************************************
函数名称:
简要描述: // 函数目的、功能等的描述
输入: // 输入参数说明,包括每个参数的作用、取值说明及参数间关系,
输出: // 输出参数的说明, 返回值的说明
修改日志:
*************************************************/
对一些复杂的函数,在注释中最好提供典型用法。
<规则6> 仔细定义并明确公共变量的含义、作用、取值范围及使用方法。
在对变量声明的同时,应对其含义、作用、取值范围及使用方法进行注释说明,同时若有必要还应说明与其它变量的关系。明确公共变量与操作此公共变量的函数或过程的关系,如访问、修改及创建等。
示例:
/* SCCP转换时错误代码 */
/* 全局错误代码,含义如下 */ // 变量作用、含义
/* 0 - 成功 1 - GT 表错误 2 -GT 错误 其它值- 未使用 */ // 变量取值范围
<规则7> 对指针进行充分的注释说明,对其作用、含义、使用范围、注意事项等说明清楚。
在对指针变量、特别是比较复杂的指针变量声明时,应对其含义、作用及使用范围进行注释说明,如有必要,还应说明其使用方法、注意事项等。
示例:
/* 学生记录列表的头指针 */
/* 当在此模块中创建该列表时,该头指针必须初始化, */
/* 这样可以利用GetListHead()获得这一列表。*/ //指针作用、含义
/* 该指针只在本模块使用,其它模块通过调用GetListHead()获取*/
/* 当使用时必须保证它非空 */ //使用范围、方法
STUDENT_RECORD *pStudentRecHead;
<规则8> 对重要代码段的功能、意图进行注释,提供有用的、额外的信息。并在该代码段的结束处加一行注释表示该段代码结束。
示例:
/* 可选通道的组合 */
if ((gsmBCIe31->radioChReq >= DUAL_HR_RCR)
&& (gsmBCIe32->radioChReq >= DUAL_HR_RCR))
{
gsmBCIe31->radioChReq = FR_RCR;
gsmBCIe32->radioChReq = FR_RCR;
}
else if ((gsmBCIe31->radioChReq >= DUAL_HR_RCR)
&& (gsmBCIe32->radioChReq == FR_RCR) ) {
gsmBCIe31->radioChReq = FR_RCR;
}
else if ((gsmBCIe31->radioChReq == FR_RCR)
&& (gsmBCIe32->radioChReq >= DUAL_HR_RCR))
{
gsmBCIe32->radioChReq = FR_RCR;
}
/* 本块结束 ( 可选通道组合 ) */
<规则9> 在switch语句中,对没有break语句的case分支加上注释说明。
示例:
switch(SubT30State)
{
case TA0:
AT(CHANNEL, \T+FCLASS=1\\r\
if(T30Status != 0)
{
return(1); }
InitFax(); /* 准备发送传真 */
AT(CHANNEL, \TD\\r\发送CNG ,接收 CED 和 HDLC 标志*/
T1_Flg = 1;
iResCode = 0;
/* 没有 break; */
case TA1:
iResCode = GetModemMsg(CHANNEL);
break;
default:
break;
}
<规则 10> 维护代码时,要更新相应的注释,删除不再有用的注释。
保持代码、注释的一致性,避免产生误解。
1.2 命名
本文列出Visual C++的标识符命名规范。
<规则 1> 标识符缩写
形成缩写的几种技术: