程序编码规范标准详.docx
《程序编码规范标准详.docx》由会员分享,可在线阅读,更多相关《程序编码规范标准详.docx(10页珍藏版)》请在冰豆网上搜索。
程序编码规范标准详
蜗牛游戏程序编码规范<版本0.1>
规范说明:
制定该规范的目的是让程序清晰易懂、易维护、易管理。
该规范为强制规范,必须执行,如果有没涉及的地方请参考《高质量C++-C编程指南》。
当所在编程环境<如MFC、Linux>与本规范有差异时,可以使用所在编程环境的规范,但是同一个项目必须是统一的规范。
最后希望大家都能养成一个良好的程序习惯,一个好的习惯受益终身!
一、命名规则
1.所有命名应当直观且可拼读,并具有实际意义;
2.类名和函数名用大写字母开头的单词组合而成,接口类名以I开头;
3.常量全用大写的字母,用下划线分割单词,尽量不要使用宏;
4.类的数据成员加前缀m_,全局变量加前缀g_,静态变量加前缀s_;
5.变量名第一个字母小写,使用"名词"或"形容词+名词"的词义表示法;
示例:
·局部变量
char*pStringBuffer;
int&stringFindResult;
boolisEngineStartup;
·函数命名
unsignedintGetVoyageCoreState<>;
staticboolGetVoyageServiceCount;
·结构类型
structNodeValue
{
intwidth;
intheight;
}
·枚举类型<枚举值必须大写且有前缀>
enumVoyageSupportType
{
VOYAGE_OS_SUPPORT_INVALID=1,
VOYAGE_OS_SUPPORT_WINDOWS=2
}
·联合类型
unionColor
{
unsignedchararrColor[3];
structColorRGB
{
unsignedcharr;
unsignedcharg;
unsignedcharb;
};
};
·类类型
classObject
{
intm_width;//宽度
intm_height;//高度
voidSetValue;//成员函数
virtualintGetArea<>;//虚函数
inlineintGetWidth<>;//内联函数
};
·抽象类
classISpriteManager
{
public:
virtualintGetSpriteID<>=0;
virtualboolIsSpriteExist<>=0;
};
·自定义类型
typedefunsignedintNumber;
·全局变量<我们不主张使用全局变量>
intg_howManyPeople;
·静态变量
staticchar*s_pStringBuffer;
·常量
constfloatSPRINT_RADIUS=100.0f;
·回调函数
typedefint<*CALLBACK_SYSTEMINIT_FUNC>;
二、程序的版式
1.一行代码只做一件事情,只写一条语句,语句排版整齐;
2.关键字之后要留空格,赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如"="、"+="">="、"<="、"+"、"*"、"%"、"&&"、"||"、"<<","^"等二元操作符的前后应当加空格,一元操作符如"!
"、"~"、"++"、"--"、"&"〔地址运算符等前后不加空格,象"[]"、"."、"->"这类操作符前后不加空格;
3.程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。
{}之内的代码块在‘{’右边4格处左对齐,这里的4格也可以是VisualStudio里的一个TAB;
4.代码行最大长度宜控制在80个字符以内;
5.代码应按功能分块,代码块之间必须有空行,而且每个代码块不要超过10行。
示例:
·语句分行和空格<▲表示空格>
for▲▲&&▲;
i++,▲j++>
{
...//programcode
}
if▲▲5>
{
…
}
elseif▲
{
…
}
else
{
…
}
while▲▲b>
{
…
}
do
{
…
}while▲▲b>;
switch▲
{
case▲1:
▲▲▲▲{
▲▲▲▲w▲=▲w▲+▲2;
}
break;
}
·代码块
………
//获得字符串长度。
intlength=strlen;
//如果长度为空,直接将当前String类对象置空。
if<0==length>
{
m_pString=NULL;
m_length=0;
}
………
三、注释
1.对外暴露的模块接口全部要求使用"doxygen"注释对文件、类、函数、变量进行注释;
2.所有文件和函数必须有功能说明注释,这里不要使用"doxygen"注释<便于生成程序文档>;
3.代码块的起始处必须有该代码块的功能说明注释;
4.通信的消息和命令必须有功能和参数注释。
"doxygen"注释示例:
·接口文件首部
/**
filevarithmetic.h
briefIString模块是voyage引擎开发以及游戏开发所使用的
算法集合模块。
authorArmterlaX
*/
·接口函数注释
注意:
这些接口注释都是写在头文件里的。
注意:
接口参数要写[IN]或者是[OUT]以表明参数是输入参数还是输出参数。
函数接口注释
/**
brief对任意类型元素的数组进行快速排序。
parampHead
[IN]元素数组首地址。
paramppDstHead
[OUT]输出一组经过排序的指针。
*/
voidQuickSort;
·类接口注释
/**
briefIString类是用于在Voyage引擎内部进行字符串处理的类。
IString类可以完成快速的字符串连接、分割、字串查找、
字串修改等功能。
*/
classIString
{
public:
/**
briefIString默认构造函数。
remarks使用默认构造函数构造IString对象不会
申请任何堆内存。
*/
IString<>;
/**
brief使用标准字符串构造IString类对象。
parampString
[IN]指定源字符串。
也就是使用哪个字符串构造当前IString对象。
remarks这个构造办法会申请堆内存,构造时调用一次堆分配。
分配空间大小与参数指定的字符串长度加1相等。
*/
IString;
/**
brief析构函数,如果当前IString类对象已经申请了堆内存,
该函数会释放这个堆内存。
*/
~IString<>;
………
};
·通信的消息和命令
/**
\brief聊天内容信息
\param聊天类型,类型int
\param聊天内容,类型wstring
*/
MSG_SERVER_SPEECH=1001
模块内部注释示例:
·文件首部
/*
file$FILE$
brief文件说明
author%USERNAME%
date$DATE$
*/
·函数注释
//做地形的可视检测
intTerrainSubObject:
:
IsVisible
·变量注释
intValCol;//修改表格的第几列数据
四、服务端平台无关
1.服务端程序不要使用依赖于操作系统的API和数据类型,以及和操作系统相关的规则,以便于未来Windows和Linux平台切换。
五、服务端表格操作
1.服务端表格"Record"的名称定义也要符合命名规范;
2.在操作时不能直接用数字表示列号;
示例:
//表格列号的定义
enum
{
CCR_CLONE_SERIAL=0,
CCR_CYCLE_TIME,
CCR_INTO_COUNT,
CCR_COL_COUNT
};
…………………
//表格定义和访问
pKernel->AddRecord;
pKernel->SetRecordColTypeCCR_CLONE_SERIAL,VARTYPE_INT>;//副本号
pKernel->SetRecordColTypeCCR_CYCLE_TIME,VARTYPE_INT>;//进入时间
pKernel->SetRecordColTypeCCR_INTO_COUNT,VARTYPE_INT>;//进入次数
六、客户端文件读写
1.客户端必须使用引擎提供的API进行文件的打开、读写、关闭等操作。
示例:
HANDLEhFile=_CORE_API->fio->_CreateFile;
if
returnfalse;
DWORDLength=_CORE_API->fio->_GetFileSize;
if0>
{
char*pBuffer=newchar[Length+1];
_CORE_API->fio->_ReadFilepBuffer,Length,NULL>;
}
_CORE_API->fio->_CloseHandle;
七、客户端内存操作
1.分配内存并调用默认构造函数:
char*p=Voy_New;等价于char*p=newchar[23];
CUnit*p=Voy_New;等价于CUnit*p=newCUnit[2];
CUnit*p=Voy_New;等价于CUnit*p=newCUnit;
2.释放内存并调用析构函数:
Voy_Delete
;
如果p是某个类的指针,如:
CUnit*pUnit=Voy_New;
char*p=pUnit;
Voy_Delete
;
这个时候不会调用CUnit的析构函数,因为传给Voy_Delete的指针是一个char*的指针,Voy_Delete认为char*指针没有析构函数。
因此,这种情况下,必须把p转换为Voy_Delete可接受的格式:
<对指针的引用>
Voy_Delete<p>;//这样就能正确地调用析构函数
Voy_Delete和V