id software编程规范

来源:互联网 发布:淘宝二手官方下载 编辑:程序博客网 时间:2024/06/06 01:30

        前令天看了文章代码之美--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_FRONT0
        尽量多用const关键字:

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

类定义规范

        类描述的标准头:

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

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

class idVec3 {    floatx;    floaty;    floatz;}
        类方法名命名与通用规范中函数命名采用相同的规则:

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

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

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

1.list of friend classes2.public variables3.public methods4.protected variables5.protected methods6.private variables7.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 classid<name>Ctrl     // dialog control classid<name>Frm      // frame windowid<name>View     // view windowid<name>         // any other class

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

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

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

class idRenderWorld;files:RenderWorld_load.cppRenderWorld_demo.cppRenderWorld_portals.cpp

原创粉丝点击