1.4  代码规范

1.4 代码规范

  • 最近更新2018年09月12日

特殊说明:版权归个人所有,请勿转载,谢谢合作。

良好的编程风格是提高程序可靠性非常重要的手段,也是大型项目多人合作开发的技术基础。通过规范定义来避免不好的编程风格,增强程序的可读性,便于自己和他人理解。代码规范,针对于不同的企业来说各不相同,追其根源,都源于匈牙利命名法。

1.4.1    变量命名

匈牙利命名法是一种编程时的命名规范。基本原则是:变量名=属性+类型+对象描述,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分。命名要基于容易记忆、容易理解的原则。保证名字的连贯性是非常重要的,表1.1描述了变量定义的数据类型部分。

 

  • 表1.1 数据类型部分
前缀 表示数据类型
c char类型
by BYTE类型
n Short类型
i int类型
x, y 分别用作x坐标和y坐标
cx, cy 分别用作x长度和y长度,c代表Count
b BOOL 类型
f float类型
w WORD类型
l LONG类型
dw DWORD类型
u 无符号类型
fn 函数
s string(串)
sz 以0结尾的字符串类型
h 句柄类型
p 指针类型

 

表1.2描述了变量定义的属性部分。

  • 表1.2 属性部分
前缀 表示数据类型
g_ 全局变量
c_ 常量
m_ C++类成员变量
s_ 静态变量

 

表1.3描述了变量定义的描述部分。

 

  • 表1.3 描述部分
关键词 描述
Max 最大
Min 最小
Init 初始化
T(或Temp) 临时变量
Src 源对象
Dest 目标对象

命名必须具有实际的意义,形式为xMaxValue,x由数据类型或属性部分组成(如果x为整型,变量命名为:iMaxValue),Max、Value表示连续意义字符串(由描述部分确定),如果连续意义字符串有多个,则每个具有意义的字符串,首字母需大写(像iMaxValue中的“M”与“V”)。

m_   类成员变量    m_iVal ,  m_bFlag

g_    全局变量      g_iMsg , g_bFlag

s_    静态变量      s_iCount, s_bFlag

局部变量中可采用如下几个通用变量:iTemp ,iResult,i,j(一般用于循环变量)。

 

1.4.2    常量命名和宏定义

常量和宏定义必须具有实际意义。常量和宏定义必须全部以大写字母来撰写,中间可根据意义的连续性用下划线连接,每一条定义的右侧必须在41个位置处有一简单的注释,说明其作用。资源名称定义格式如表1.4所示。

  • 表1.4 资源名称定义格式
名称 关键词内容
菜单 IDM_XX或者CM_XX
位图 IDB_XX
对话框 IDD_XX
字符串 IDS_XX

 

表1.4关键词内容列中,“XX”所代表的是资源控件ID所代表的具体含义。例如,实现登录功能的对话框,命名为:“IDD_LOGIN”。

 

1.4.3    函数命名

第一个字母必须使用大写字母,要求用大小写字母组合规范函数命名,必要时可用下划线间隔,示例如下:

int  GetValue();

void* Word_GetApp();

如果使用的是函数指针,则以“fn”开头,再加上函数的具体含义。例如,一个实现获得最大值的函数指针,定义应为:“… fnGetMax(…)”。

 

1.4.4    结构体命名

结构体类型命名必须全部用大写字母,原则上前面以下划线开始;结构体变量命名必须用大小写字母组合,第一个字母必须使用大写字母,必要时可用下划线间隔。全局数据定义只需注意其用途。

示例如下:

typedef struct
 {
     char szProductName[20];
     char szAuthor[20];
     char szReleaseDate[16];
     char szVersion[10];
     unsigned long ulMaxTables;
     unsigned long ulUsedTables;
}DBS_DATABASE;
DBS_DATABASE GdataBase;

1.4.5    控件的命名

控件的命名需要用小写前缀表示类别,如表1.5所示。

  • 表1.5 控件命名前缀
前缀 类型内容
fm 窗口
cmd 按钮
cob Combo Box(下拉式列表框)
txt 文本输入框
lab Labal(标签)
img Image(图像)
pic Picture
grd Grid(网格)
scr 滚动条
lst List Box(列表框)
frm Fram(框架)

 

1.4.6    引用模板示例

文件头的注释模板:

//*****************************************************************************
//	FILE	:	XX.h
//*****************************************************************************
//	POWER	:	Copyright (c) 2012 for NSI(沈阳航空航天大学-北方软件学院).
//	AUTHOR	:	2012-2-7 8:37 Create by lixinghua for functions.
//	VERSION	:	V1.0.0.1
//	NOTE	:	此文件中含有XXX类,各类之间的主次关系,主要功能,
//			或潜在的问题。以及全局变量或函数	的作用。
//*****************************************************************************
//

说明:

(1)每行字符不得超出80个字符(“/”加上“*”的总长度为80个字符;

(2)“FILE”为文件名;

(3)“POWER”为版权信息,为固定模式无需修改;

(4)“AUTHOR”为作者信息,需要时间的写法;

(5)“VERSION”为版本信息,版本说明见“1.4.7章节 关于版本控制”;

(6)“NOTE”为本文件中存在的程序功能进行说明。

类的注释模板:

//=============================================================================
//	NAME 	: 	XX类
//=============================================================================
// 	LIST 	: 	void
// 	AUTHOR 	: 	2012-2-6 11:18 Create by lixinghua for functions.
//	VERSION	:	V1.0.0.1
// 	NOTE	: 	类的使用说明,即主要对外接口(函数)以及主要功能和潜在问题。
//=============================================================================
//

 

说明:

(1)每行字符不得超出80个字符(“/”加上“=”的总长度为80个字符;

(2)“NAME”为类的名称;

(3)“LIST”为实现的内部方法(函数)列表,并进行说明;

(4)“AUTHOR”为作者信息,需要时间的写法;

(5)“VERSION”为版本信息,版本说明见“1.4.7章节 关于版本控制”;

(6)“NOTE”为本文件中存在的程序功能进行说明。

函数开头的注释模板:

//-----------------------------------------------------------------------------
//	FUNC	:	XX函数
//-----------------------------------------------------------------------------
//	IN	:	变量1,变量1功能的说明;
//			变量2,变量2功能的说明;
//			变量n,变量n功能的说明;
//	OUT	:	void
//	RETURN	:	void
//	AUTHOR	:	2012-2-6 11:18 Create by lixinghua for functions.
//	NOTE	:	此函数实现了XX功能,其中调用了XX函数。
//-----------------------------------------------------------------------------
//

 

说明:

(1)每行字符不得超出80个字符(“/”加上“-”的总长度是80个字符;

(2)“FUNC”为函数的名称;

(3)“IN”为输入的参数;

(4)“OUT”为在函数内部的输出信息内容,即函数参数作为返回值的说明;

(5)“RETURN”函数的返回值(如:函数成功返回TRUE,否则返回FALSE。);

(6)“AUTHOR”为作者信息,需要时间的写法;

(7)“NOTE”为函数功能的描述,其中包括:功能描述、全局变量描述以及调用模块。

 

1.4.7    关于版本控制

以版本“V2.20.15.80”为例,含义如下:

其中 V2.20.15.80 ,80表示每修复一处问题,在原有数值上累加一次。

其中 V2.20.15.80 ,15表示添加或删除某些功能(函数或类),在原有数值上累加一次。

其中 V2.20.15.80 ,20表示每维护一次程序,在原有数值上累加一次。

其中 V2.20.15.80 ,2表示每一次系统整体的更新,包括整个功能甚至需求的变化更新,在原有数值上累加一次。

整体含义,表示整体需求或框架升级过2次,维护过20次,共添加或删除功能15次,累计修改问题80次。

1.4.8    代码规范例举

【例1-2】以SetDemoTitle函数为例,SetDemoTitle函数实现了设置标题功能,函数原型如下:

 

 

//-----------------------------------------------------------------------------
//	FUNC	:	设置模块标题函数
//-----------------------------------------------------------------------------
//	IN	:	const char * pszTitle,传入的标题名称;
//	OUT	:	void
//	RETURN	:	标题设置成功返回TRUE,否则返回FALSE。
//	AUTHOR	:	2012-2-6 11:18 Create by lixinghua for functions.
//	NOTE	:	此函数主要用于,设置程序标题文字。方法中使用了全局变量
//			g_bIsSetTitle。
//-----------------------------------------------------------------------------
//
BOOL g_bIsSetTitle = FALSE;
BOOL SetDemoTitle(const char * pszTitle)
{
// Added by PengMo.
if (NULL == pszTitle)	// 思考一下 为什么不写成 if (pszTitle == NULL)
{
return FALSE;
}

SetWindowText(pszTitle);
g_bIsSetTitle = TRUE;
return TRUE;

 

分享到 :
1.3 应用程序的组成
上一篇 2018-09-12
相关推荐

发表回复

登录... 后才能评论