id software编程规范

        前令天看了文章代码之美--Doom3源代码赏析,里面提到的idTech4引擎的编码标准,看了觉得非常不错,可惜是全英文的,这里为了看起来方便,将之翻译为中文。译文如下:

通用规范

        使用相当于4个空格的tab键代替空格键。

        在(if,else,函数,结构体,typedefs,类定义等等)地方使用{ }:

if ( x ) {
}

        else语句的起始与if语句的右括号在同一行:

if ( x ) {
} else {
}
       含有括号的表达式,括号左右用空格隔开:

用:
if ( x ) {
}
代替:
if (x) {
}

用:
x = ( y * 0.5f );
代替:
x = (y * 0.5f);
       对于浮点值,除非显示说明用于double,否则用精确的浮点方式赋值:

用:
float f = 0.5f;
代替:
float f = 0.5;

用:
float f = 1.0f;
代替:
float f = 1.f;

        函数名用大写字母开头:

void Function( void );

        由多个单词的组成的函数名,每个单词的首字母大写:

void ThisFunctionDoesSomething( void );
        函数说明的标准头:

/*
====================
FunctionName

  Description
====================
*/
        变量名用小写字母开头:

float x;
        由多个单词组成的变量,首单词用小写字母开头,后面的均用大写字母开头:

float maxDistanceFromPlane;
        typedef自定义类型时,使用与变量定义同样的命名规则,但要加上"_t"作为后缀:

typedef int fileHandle_t;
        struct类型定义使用与变量定义同样的命名规则,但要加上"_t"作为后缀:

struct renderEntity_t;
        enum类型定义使用与变量定义同样的命名规则,但要加上"_t"作为后缀。enum结构中的常量全用大写,若含多个单词,用下划线分割:

enum contact_t {
	CONTACT_NONE,
	CONTACT_EDGE,
	CONTACT_MODELVERTEX,
	CONTACT_TRMVERTEX
};
        递归函数名加上"-r"后缀:

void WalkBSP_r( int node );

        define定义全部使用大写字母,含多个单词时,用下划线分割:

#define SIDE_FRONT		0
        尽量多用const关键字:

用:
const int *p;			// pointer to const int
int * const p;			// const pointer to int
const int * const p;	        // const pointer to const int
不要用:
int const *p;
  

类定义规范

        类描述的标准头:

/*
===============================================================================

	Description

===============================================================================
*/
        类名均以"id"开头,后学单词均以大写字母开头:

class idVec3;
        类变量命名与通用规范中的变量命名采用相同的规则:

class idVec3 {
    float		x;
    float		y;
    float		z;
}
        类方法名命名与通用规范中函数命名采用相同的规则:

class idVec3 {
    float		Length( void ) const;
}
        类变量和方法采用更为优美的所进方式,变量类型和函数返回值类型位于首列,变量名和方法名位于第二列:

class idVec3 {
    float		x;
    float		y;
    float		z;
    float		Length( void ) const;
    const float *	ToFloatPtr( void ) const;
}
        将指针的*号置于首列,这样有利于增强程序的可读性。

        类变量和方法的书写顺序如下:

1.list of friend classes
2.public variables
3.public methods
4.protected variables
5.protected methods
6.private variables
7.private methods
这样做使得public接口在开头就很容易被发现。

        当类方法不改变类成员变量时,就一定要让其成为"const"方法。

        避免使用"const_cast"。

        除非对象要修改其状态,否则返回"const"对象。

        大多数情况下,避免使用函数重载,如:

用:
const idAnim *	GetAnimByIndex( int index ) const;
const idAnim *	GetAnimByName( const char *name ) const;
const idAnim *	GetRandomAnim( float randomDiversity ) const;
代替:
const idAnim *	GetAnim( int index ) const;
const idAnim *	GetAnim( const char *name ) const;
const idAnim *	GetAnim( float randomDiversity ) const;

id Studio命名规范

id<name>Dlg      // dialog class
id<name>Ctrl     // dialog control class
id<name>Frm      // frame window
id<name>View     // view window
id<name>         // any other class

文件命名规范
         每个类应位于独立的源文件中,除非它划分为几个小类后更有意义。

         文件命应该与类名去掉"id"前缀相同:

class idWinding;

files:
Winding.cpp
Winding.h
        当一个类被划分到多个文件中时,这些文件的名字以该类名去掉"id"前缀开始,紧跟着是下划线,然后是子集名:

class idRenderWorld;

files:
RenderWorld_load.cpp
RenderWorld_demo.cpp
RenderWorld_portals.cpp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值