id software編程規範

來源:互聯網
上載者:User

        前令天看了文章代碼之美--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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.