程序编码规范标准详.docx

上传人:b****1 文档编号:1633101 上传时间:2022-10-23 格式:DOCX 页数:10 大小:19.05KB
下载 相关 举报
程序编码规范标准详.docx_第1页
第1页 / 共10页
程序编码规范标准详.docx_第2页
第2页 / 共10页
程序编码规范标准详.docx_第3页
第3页 / 共10页
程序编码规范标准详.docx_第4页
第4页 / 共10页
程序编码规范标准详.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

程序编码规范标准详.docx

《程序编码规范标准详.docx》由会员分享,可在线阅读,更多相关《程序编码规范标准详.docx(10页珍藏版)》请在冰豆网上搜索。

程序编码规范标准详.docx

程序编码规范标准详

蜗牛游戏程序编码规范<版本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->SetRecordColType

CCR_CLONE_SERIAL,VARTYPE_INT>;//副本号

pKernel->SetRecordColType

CCR_CYCLE_TIME,VARTYPE_INT>;//进入时间

pKernel->SetRecordColType

CCR_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->_ReadFile

pBuffer,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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 销售营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1