VC编码规规范.docx
《VC编码规规范.docx》由会员分享,可在线阅读,更多相关《VC编码规规范.docx(10页珍藏版)》请在冰豆网上搜索。
![VC编码规规范.docx](https://file1.bdocx.com/fileroot1/2023-7/2/17784a64-05d6-4635-a15d-025ec7dec01e/17784a64-05d6-4635-a15d-025ec7dec01e1.gif)
VC编码规规范
1 项目风格
1.1 项目取名
在VC之中,项目名为最后可执行文件名,所以项目名最好以最终的可执行文件名一致。
1.2 项目目录设置
为保证VC项目的备份方便、快捷,将所有该项目有关的文件全部放到统一的目录之下,为每个项目在该目录之下建立一个目录,项目之间的公共部分建立在public目录之下,项目所需要的基础库根据所需要的基础库数目分别建立不同的目录,项目相关的测试程序都统一放在TEST目录之下。
下表显示了一个软件工程PSS系统的目录设置表:
PSS系统有两个模块PSS_mod1和PSS_mod2,两个模块有一部分共用代码,在工程开发过程之中编写了三个测试程序PSS_TEST1、 PSS_TEST2、PSS_TEST3,PSS系统开发过程之中用到了第三方公用模块Third_Mod,则该系统的目录设置如下:
一级目录
二级目录
三级目录
备注
WORK
PSS_mod1
Debug
VC集成环境生成的调试版本目录
Release
VC集成环境生成的发行版本目录
Res
VC集成环境生成的资源文件目录
Include
所属mod1的头文件
Source
所属mod2的头文件
PSS_mod2
Debug
VC集成环境生成的调试版本目录
Release
VC集成环境生成的发行版本目录
Res
VC集成环境生成的资源文件目录
Include
所属mod1的头文件
Source
所属mod2的头文件
PUBLIC
Include
Mod1和mod2公用的头文件
Source
Mod1和mod2公用的源代码文件
Lib
Mod1和mod2公用的库文件
TEST
PSS_Test1
测试项目一
PSS_Test2
测试项目三
PSS_Test3
测试项目三
Third_Mod
第三方公用模块
1.3 集成环境内的项目目录设置
每个项目在VC编成编辑环境的设置都采用相对路径的设置,不可采用绝对路径,保证其备份到光盘设备后或恢复到硬盘时, 不需要再过多的设置就可直接编译。
同样在用#include语句时不要太多的目录搜索,如下所示:
#include“../../../somehead.h”
改成:
#include"headfile.h"
或#incldue"dir/headfile.h"
并注意#include"headfile.h"与#include的区别
然后在项目设置(ProjectSetting)中加入该头文件的所在目录。
1.4 项目修改记录追踪
每一个VC项目必须存在Changes.Log,用以记载项目产生以来所有的改动,其格式必须如下:
日期:
2000/4/28
修改人:
**
修改主题:
相关修改文件:
hello.cpp
修改内容详细描述:
另外可充分利用VisualC++自动生成的Readme.txt文件来记载项目相关的信息。
2 文件风格
2.1 文件生成
文件名的语义应该能概括表达本文件所包含函数主要实现什么功能。
文件名用小写英文字母表达,严禁使用中文;对于几个单词组合表达的文件名,单词之间用_符号分开。
文件名的后缀定义:
a.VC自动生成的源文件和头文件后缀分别为:
*.cpp和.h。
b.其他源文件和头文件后缀分别为:
*.cxx和*.hxx。
对于规范的VC派生类,尽量用ClassWizard生成文件格式,避免用手工制作头文件/实现文件。
//Constructors//构造
//Attributes//属性,品质,特征,加于,归结
//Operations//运转,操作,实施,作用,业务,工作,手术,军事行动
//Overridables//可重载的
//Implementation//实现
每一次类都至少有一个//Implementation,在不同的位置MFC做不同的处理,在编写代码时最好
与MFC这种风格一致。
2.2 文件头部注释
文件头部注释主要是表明该文件的一些信息,其格式如下:
///////////////////////////////////////////////////////////////////
//文件名 :
mange_fun.cxx
//版本 :
//目的及主要功 :
系统参数的设定
//创建日期 :
1999.09.14
//修改日期 :
//作者 :
***
//修改者 :
////////////////////////////////////////////////////////////////
2.3 文件规格化功能键
源文件在编写完毕时,VisualC++提供Alt+F8功能键,进行文件规格化,常使用该按键可使得文件保持规格化(注,Alt+F8功能键对连续两个CASE语句则会发生处理错误,不能规格化)。
3 函数风格
3.1 函数名的约定。
函数名的语义应该能反映函数实现的功能。
对于api函数的命名规则为:
a.函数一律以api_lm_开头;lm表示此函数为lonicera-mda子系统的函数,pdm模块的函数名以api_lp_开头。
b.后面的命名以函数语义为基准,如创建一点的函数完整的函数名为api_lm_ceate_point()。
对于DI函数的命名规则:
a.函数名=lm_+(函数语义)。
b.对于几个单词组合表达的函数名,各单词之间以_符号分开。
3.2 函数注释
ClassWizard自动生成的函数,如消息响应函数,则不必太多的注释和解释;
对于自行编写的函数,若是系统关键函数,则须在函数实现部分的上方标明该函数的信息,格式如下:
//======================================================================
//函数名:
InsureHasOutputInfo
//功能描述:
确保有适当的输出信息
//输入参数:
nProductID:
相应的产品ID
//输出参数:
void
//创建日期:
00-2-21
//修改日期:
00-2-21
//作 者:
***
//附加说明:
//======================================================================
3.3 代码缩进
每一个嵌套的函数块,使用一个TAB缩进(可以设定为3个空格),大括号必须放在条件语句的下一行,单独成一行,便于匹对反大括号应该在单独的一行,在大多数情况下反扩号应有注释内容。
举例如下:
if(condition1)
{
while(condition2)
{
…..
…..
}//endwhile(condition2)
}//endif(condition1)
或者
if(condition1){
while(condition2){
….
….
}//endwhile(condition2)
}//endif(conditionl)
3.4 其它规范
1、每个源文件包括的函数体不应该多于20个,每个函数体不应该超过120行原代码。
2、函数的输入参数不多于5个,输出参数不多于5个。
3、对于超过3句以上的语句反复调用,应封装为函数调用。
4、尽量避免三层以上的嵌套循环;尽量减少程序的if语句;少用诸如I*=b、A=C+D*B++等语义难懂的语句。
5、充分利用C++的思想,真正意义上地用C++语言编程;对类扩充成员函数。
4 变量风格
变量尽量采用匈牙利命名法,同时结合VC的原则;一般情况下,变量的取名方式为:
++。
范围前缀_,类型前缀_,限定词。
特殊的类型命名,前缀表示:
类、接口
前缀
类型
例子
备注
Lm
Class
LmObject
表示类型本身
不与范围前缀结合使用
I
Interface接口
IUnknown
注:
类名前缀改为Lm,对于非全局的类最好有语义表示其所属模块。
类的实例命名与类名大致相同,只是类名语义表示类的通用含义,而类名表示此实例的具体语义。
如类名LmSketPoint表示草图点的类定义,而它的两个实例_StartPoint,_EndPoint分别代表起点和终点的语义。
类的实例命名带上前缀_。
特殊约定:
a.MouseTool的派生类的前缀为_Mt.
b.对话框类的前缀为CDlg.
c.橡皮条类的前缀为_Rb.
范围前缀:
前缀
类型
例子
备注
g_
全局作用域
g_Servers
m_
成员变量
m_pDoc,
l_
局部作用域
l_strName
少用
注:
编程时尽量少用全程变量,对于全程变量还应在类型前缀后加上如下关键字:
特征模块 :
Fea
草图模块 :
Sket
装配模块 :
Asm
工程图模块:
Lay
曲面模块 :
Surf
界面模块 :
Ui
类型前缀1、:
常用的一般数据类型的前缀表示(这只是一部分)
前缀
类型
内存规格描述
例子
ch
char
8-bitcharacter
chGrade
ch
TCHAR
16-bitcharacterif_UNICODEisdefined
chName
b
BOOL
Booleanvalue
bEnabled
n
int
Integer(sizedependentonoperatingsystem)
nLength
n
UINT
Unsignedvalue(sizedependentonoperatingsystem)
nLength
w
WORD
16-bitunsignedvalue
wPos
l
LONG
32-bitsignedinteger
lOffset
dw
DWORD
32-bitunsignedinteger
dwRange
p
*
Ambientmemorymodelpointer
pDoc
lp
FAR*
Farpointer
lpDoc
lpsz
LPSTR
32-bitpointertocharacterstring
lpszName
lpsz
LPCSTR
32-bitpointertoconstantcharacterstring
lpszName
lpsz
LPCTSTR
32-bitpointertoconstantcharacterstringif_UNICODEisdefined
lpszName
h
handle
HandletoWindowsobject
hWnd
lpfn
(*fn)()
callbackFarpointertoCALLBACKfunction
lpfnAbort
常用Windows对象名称缩写:
这些名称缩写很多情况下可直接使用,直接作变量的名称。
Windows对象 例子变量
HWNDhWnd;
HDLG hDlg;
HDC hDC;
HGDIOBJhGDIOBJ