认为一个tab为4个空格。
if ( x ) {
} if这样写,前后都有空格
if ( x ) {
} else {
} //代码尽量紧凑
x = ( y * 0.5f ) ; 代替: x = (y * 0.5f) ;
float f = 0.5f ; 代替 float f = 0.5 ;
float f = 1.0f ; 代替 float f = 1.f ;
函数命名首字母大写:
void Function ( void ) ;
在多单词的函数命名时,每个单词的首字母大写:
void ThisFunctionDoesSomething ( void ) ;
函数的标准头文件如下:
/*
========================
FunctionName
Descrption
========================
*/
变量名一小写字母开始:
float x ;
在多个单词命名变量名时,第一个单词的起始字母是小写,后面的每个单词的起始字母大写:
float maxDistanceFromPlane ;
typedef 类型 采用变量命名的规则,但是以_t结束:
typedef int fileHandle_t ;
结构类型采用和变量命名的规则,且以_t结束:
struct renderEntity_t ;
枚举类型采用变量命名规则,且以_t结束。每个枚举成员都用大写字母,多个单词用_隔开
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"开头,并且后面的单词首字母大写(用id开头的原因是他们是id团队):
class idVec3 ;
类名规则与变量命名规则一样:
class idVec3 {
float x ;
float y ;
flaot z ;
} ;
类成员函数与函数命名规则一样:
class idVec3 {
float Length ( void ) const ;
} ;
类的成员变量和方法要使列对齐。变量类型和方法类型放在第一列,变量名字和方法名字房子第二列:
class idVect3 {
float x ;
float y ;
float z ;
float Length ( void ) const ;
const float * ToFlaotPtr ( void ) const ;
}
指针的*放在第一列的原因是为了可读性,把它作为类型的一部分。
对类中的变量和方法排序如下:
1. 友员类的列表
2. Public 变量
3. public 方法
4. protected 变量
5. protected 方法
6. 私有变量
7. 私有变法
上面使得public接口能够很容易地在类的开头找到。
如果类方法没有修改任何的类变量,则将其定义为const.
避免使用 const_cast。当对象需要修改时,但是只能获取到const的版本,创建一个函数,清楚的给这个对象一个可编辑版本。
返回const 对象,除非改变了它的对象的状态。
.
.
.