1559
备注:
|
2870
|
删除的内容标记成这样。 | 加入的内容标记成这样。 |
行号 3: | 行号 3: |
* 先写注释再写代码,规范化的注释。按照doxygen的标准给类、函数、变量写注释。比如,类似的注释一点用处都没有:{{{#!cplusplus | * 先写注释再写代码,规范化的注释。按照doxygen的标准给类、函数、变量写注释。比如,类似这样的注释一点用处都没有:{{{#!cplusplus |
行号 18: | 行号 18: |
}}} | }}}对于函数的注释应该写在头文件的声明中,而不是定义中。 |
行号 26: | 行号 26: |
* 避免switch,用数据来简化代码 * 注意代码统计质量,函数不可太长,方法不可太多,不可有太多子类,不可有太多父类 |
* 避免switch,用数据来简化代码。比如{{{#!cplusplus switch (index) { case 0: return RP_VALUE0; case 1: return RP_VALUE1; case 2: return RP_VALUE2; case 3: return RP_VALUE3; case 4: return RP_VALUE4; case 5: return RP_VALUE5; case 6: return RP_VALUE6; case 7: return RP_VALUE7; } }}}可以使用如下代码来代替{{{#!cplusplus int rp_values[] = {RP_VALUE0, RP_VALUE1, RP_VALUE2, RP_VALUE3, RP_VALUE4, RP_VALUE5, RP_VALUE6, RP_VALUE7}; return rpvalues[index]; }}}再比如{{{#!cplusplus switch (statement) { case srTimerSet: { //n lines of codes break; } case srTimerKill: { //n lines of codes break; } // n cases return true; } }}}上述switch结构总计有170个case,代码长达5000行。同样可以用数组来改造它{{{#! bool (*response[])(void) = {TimerSetHandler, TimerKillHandler, ...}; return responses[statement](); }}}数组里面可以是函数,也可以是仿函数对象。 * 注意代码统计质量,函数不可太长,方法不可太多,不可有太多子类,不可有太多父类。比如,IkeScriptMgr::CallResponse单个函数长达5000多行,一个类SimHuman有多达414个成员函数,这些数字说明这些地方的设计很可能存在问题,需要考虑是否要重构。 |
行号 32: | 行号 67: |
* 注意Singleton模式的实现。 |
some tips on writing c++ codes to avoid potential bugs:
先写注释再写代码,规范化的注释。按照doxygen的标准给类、函数、变量写注释。比如,类似这样的注释一点用处都没有:
1 //---------------------------------------------------------------------------- 2 // @ SimDoor::SimDoor() 3 // --------------------------------------------------------------------------- 4 // Constructor 5 //---------------------------------------------------------------------------- 6 SimDoor::SimDoor( const RSString& name )
再比如
比较好的写法应该类似这样:
对于函数的注释应该写在头文件的声明中,而不是定义中。- 避免重复代码,使用函数。
避免使用预编译
应该定义成
static const int kMaxFriends = 2;
并写在用到它的类中,而不是一个全局的常量。避免switch,用数据来简化代码。比如
可以使用如下代码来代替
再比如
上述switch结构总计有170个case,代码长达5000行。同样可以用数组来改造它
bool (*response[])(void) = {TimerSetHandler, TimerKillHandler, ...}; return responses[statement]();
数组里面可以是函数,也可以是仿函数对象。注意代码统计质量,函数不可太长,方法不可太多,不可有太多子类,不可有太多父类。比如,IkeScriptMgr::CallResponse单个函数长达5000多行,一个类SimHuman有多达414个成员函数,这些数字说明这些地方的设计很可能存在问题,需要考虑是否要重构。
- 避免指针,避免数组,避免自己写常用的数据结构,用stl
- 避免用C++实现OO design,注意对象的owner
- 善用svn,大的修改应该建分支
- 速度至关重要时,用查表代替计算,避免浮点数,
- 注意Singleton模式的实现。