现在的位置: 首页 > 综合 > 正文

让你的C++代码变的更加健壮

2013年10月22日 ⁄ 综合 ⁄ 共 932字 ⁄ 字号 评论关闭

介绍

在实际的项目中,当项目的代码量不断增加的时候,你会发现越来越难管理和跟踪其各个组件,如其不善,很容易就引入BUG。因此,我们应该掌握一些能让我们程序更加健壮的方法。

这篇文章提出了一些建议,能有引导我们写出更加健壮的代码,以避免产生灾难性的错误。即使、因为其复杂性和项目团队结构,你的程序目前不遵循任何编码规则,按照下面列出的简单的规则可以帮助您避免大多数的崩溃情况。

背景

先来介绍下作者开发一些软件(CrashRpt),你可以http://code.google.com/p/crashrpt/网站上下载源代码。CrashRpt
顾名思义软件崩溃记录软件(库),它能够自动提交你电脑上安装的软件错误记录。它通过以太网直接将这些错误记录发送给你,这样方便你跟踪软件问题,并及时修改,使得用户感觉到每次发布的软件都有很大的提高,这样他们自然很高兴。

在分析接收的错误记录的时候,我们发现采用下文介绍的方法能够避免大部分程序崩溃的错误。例如:局部变量未初始化导致数组访问越界,指针使用前未进行检测(NULL)导致访问访问非法区域等。

我已经总结了几条代码设计的方法和规则,在下文一一列出,希望能够帮助你避免犯一些错误,使得你的程序更加健壮。

Initializing Local Variables (局部变量初始化)

使用未初始化的局部变量是引起程序崩溃的一个比较普遍的原因,例如、来看下面这段程序片段:

?
1
2
3
4
5
6
//
Define local variables
BOOLbExitResult;
//
This will be TRUE if the function exits successfully
FILE*
f;
//
Handle to file
TCHARszBuffer[_MAX_PATH];  
//
String buffer
 
//
Do something with variables above...

上面的这段代码存在着一个潜在的错误,因为没有一个局部变量初始化了。当你的代码运行的时候,这些变量将被默认负一些错误的数值。例如bExitResult 数值将被负为-135913245 ,szBuffer?必须以“”结尾,结果不会。因此、局部变量初始化时非常重要的,如下正确代码:

?
1
2
3
4
5
6
7
8
9
10
11
【上篇】
【下篇】

抱歉!评论已关闭.