专业化的程式设计之Coding Rules谈(3)
内存相关问题:
1.在分配内存(如图形结构...)时,应该先使用Memset(..)等函数赋值内 存。
Exm1:
BITMAP bm;
::memeset(&bm,0,sizeof(BITMAP));
Exm2:
TCHAR tszName[MAX_PATH];
::memeset(tszName,0,sizeof(TCHAR) * MAX_PATH);
2.所有涉及到内存分配的地方一定要判断是否分配成功,并进行相应的处理。
3.使用 new 与 delete 来分配和释放堆内存(更安全;易测试内存泄漏)。
4.指针问题:
定义Pointer时:将Pointer初始化置空NULL(原因:否则if( NULL == *)会失效)。
任何时候使用Pointer时,均先判断它是否为空,为空则应相应处理。
分配内存前,先判断是否非空,为非空先删去置空。
分配内存后,马上判断是否分配成功(Pointer!=NULL),为空则相应处理。
释放指针时,判断是否非空,非空则先删去(delete),再置空(原因:只有置空的指针使用delete时会不做任何事)。
5.程式设计完成后,使用debug检查是否有内存泄漏;利用资源监视器一类的软件分析程式中是否有全局或局部未释放的内存。
三.共同约定,统一形式,方便多人合作(大多数为目前通用的约定)。
1.定义结构:
typedef struct tagSTRUCTNAME
{
....
}STRUCTNAME ;
2.定义常量:
const static WORD W_PERSON_NUM = 10;
3.命名规则:
XX 前缀 xx 前缀
类class C bool->BOOL b
成员变量 m_ BYTE by
全局变量 g_ char->TCHAR tch
API函数 :: WORD w
指针 p/lp DWORD dw
句柄 h int->LONG l
LPTSTR lpsz float f
LPCTSTR lpcsz DOUBLE db
POINT Pt(diff for p) RECT rt