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
- id software 编程规范
- id software编程规范
- 向id Software致敬
- id Software公司介绍
- Deepin Software编程
- 【规范】编程注释规范
- 编程规范
- 编程规范
- 编程规范
- 编程规范
- 编程规范
- 编程规范:
- 编程规范
- 编程规范
- 编程规范
- 编程规范
- 编程规范
- 编程规范
- 敏捷日志2013-1-21
- 嵌入式linux应用开发完全手册学习笔记三(windows、linux下工具使用)
- 硬链接和软链接(hard link&soft link)
- Poj 1042 Gone Fishing
- Toast 和Timer与 Can't create handler inside thread that has not called Looper.prepare()问题
- id software编程规范
- 如何将shp数据导入Oracle Spatial
- 【Oracle在线笔试题】const_cast的应用
- android聊天表情开发
- LoadRunner--信与不信之间
- Android对Linux内核的增强:Low Memory Killer(低内存管理)
- 挑战编程 程序设计竞赛训练手册-1.6.6 解释器(Interpreter)
- 常见的棋牌游戏网站支付接口
- linux (centos)目录