1、定义一个变量时,尽量给它初始化。HKEY hKey =NULL;
2、对于多次使用的语句,可以使用goto语句,而且,不同if语句的返回值保存在同一个变量中,用goto语句的标志统一返回。
3、对于分配内存失败和成功的情况,可以在结尾使用以下语句:
exit:
if(hSrcKey)
{
RegCloseKey(hSrcKey);
}
if(lpNameBuffer)
{
HF_MemFree(lpNameBuffer);
}
return bReturn;
来检测。简化了很多逻辑步骤。
4、 为了使界面美观,可以在输出的前后都加一个回车如:_tprintf(TEXT("\n初始化磁盘完成!\n"));
为了使代码美观,可以将某行注释的上一行变为空白行,下一行也变为空白行。
5、写完代码后,一定要检查是否有内存没有释放、句柄有没有关闭、文件指针有没有关闭并指向空的情况。(如malloc与free,createprocess与CloseHandle( pInfo.hProcess );CloseHandle( pInfo.hThread );,FILE *fWriteLog =NULL;fWriteLog = fopen(pLogPath,"a+");与fclose(fWriteLog);fWriteLog = NULL;)又如:
#include <STDIO.H>
void main()
{
FILE *fStream =NULL;
fStream = fopen("d:\WIMRepairRead.txt");
if (NULL != fStream)
{
}
else
{
}
exit:
if(NULL != fStream)
{
fclose(fStream);
fStream = NULL;
}
}
6、如果程序不是很大,可以使用char数组,代替malloc,因为malloc得考虑返回值之前释放内存空间的问题。char数组是自动释放的。
7、对于每一次更改,都要写清版本号,及更改的内容,以及存在的问题,方便以后查找错误。
8、对于用到&&运算符的式子,尽量在&&两边的式子各加一个括号,防止出现运算优先级错误。加一个括号也没啥呀,不要想太多。
9、有了if,就一定要考虑else的情况。有了if …… else if ……,更要考虑else的情况,把所有的情况都考虑到位,并写好注释,并尽量在每个分支添加日志。就像那一次,dwInitialState = 7; Form1->Timer1->Enabled = true;这两句话的位置写反了,写成了Form1->Timer1->Enabled = true;dwInitialState = 7; 而且timer1中有if(dwInitialState == 0)...else if(dwInitialState = 7)...else...,显然在开启定时器的时候,dwInitialState是另外一个值8,就会导致程序异常。
10、在用c++builder编程时,习惯一种风格,背景是天蓝色的,字体是白色的,很协调。
11、养成 在vc中使用自己的log打印日志的好习惯,用WriteLog函数代替cout和printf,错误的地方一定要连同getlasterror等显示出错误号,正确的地方就不用了,突出的地方要显示里程碑,如运行到哪儿哪儿了。。
12、对于错误日志,最好注明该错误所在的页面名称,如:路哥常常定义的:
#define __RPD__ TEXT("RegPathData:")
if(!pInfo)
{
LI_INFOPRINT(__RPD__ TEXT("SetBackupRestoreNamePrivilege:NodeAlloc fail\n"));
goto exit;
}
习惯真好