2.4. 正确性、效率
<规则1> 严禁使用未经初始化的变量。
引用未经初始化的变量可能会产生不可预知的后果,特别是引用未经初始化的指针经常会导致系统崩溃,需特别注意。声明变量的同时初始化,除了能防止引用未经初始化的变量外,还可能生成更高效的机器。
<规则2> 定义公共指针的同时对其初始化。
这样便于指针的合法性检查,防止应用未经初始化的指针。建议对局部指针也在定义的同时初始化,形成习惯。
<规则3> 较大的局部变量(2K以上)应声明成静态类型(static),避免占用太多的堆栈空间。
避免发生堆栈溢出,出现不可预知的软件故障。
<规则4> 防止内存操作越界。
说明:内存操作主要是指对数组、指针、内存地址等的操作。内存操作越界是软件系统主要错误之一,后果往往非常严重,所以当我们进行这些操作时一定要仔细小心。
A.数组越界。
char aMyArray[10];
for( i = 0; i <= 10; i++ )
{
aMyArray[i] = 0; //当i等于10时,将发生越界。
}
B.指针操作越界。
char aMyArray[10];
char *pMyArray;
pMyArray = aMyArray;
--pMyArray; // 越界
pMyArray = aMyArray;
pMyArray += 10; // 越界
<规则5> 减少没必要的指针使用,特别是较复杂的指针,如指针的指针、数组的指针,指针的数组,函数的指针等。
用指针虽然灵活,但也对程序的稳定性造成一定威胁,主要原因是当要操作一个指针时,此指针可能正指向一个非法的地址。安安全全地使用一个指针并不是一件容易的事情。
<规则6> 防止引用已经释放的内存空间。
在实际过程中,稍不留心就会出现在一个模块中释放了某个内存块(如指针),而另一模块在随后的某个时刻又使用了它。要防止这种情况发生。
<规则7> 程序中分配的内存、申请的文件句柄,在不用时应及时释放或关闭。
分配的内存不释放以及文件句柄不关闭,是较常见的错误,而且稍不注意就有可能发生。这类错误往往会引起很严重后果,且难以定位。
<规则8> 注意变量的有效取值范围,防止表达式出现上溢或下溢。
示例:
unsigned char cIndex = 10;
while( cIndex-- >= 0 )
{
} //将出现下溢
当cIndex等于0 时,再减1不会小于0,而是0xFF,故程序是一个死循环。
char chr = 127;
chr += 1; //127为chr的边界值,再加1将使chr上溢到-128,而不是128。
<规则9> 防止精度损失。
除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自常见C/C++编码规范(5)