本文主要是介绍如何避免写代码过程中一些不必要的手误----一点经验跟看法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1。 避免内存访问越界
容易导致内存访问越界的函数
memcpy
memset
_itoa, _i64toa, _ui64toa, _itow, _i64tow, _ui64tow 及其 *to*_s 系列函数
memset(ptr1, , length) memcpy(ptr1, ptr2, length)
length 有时候需要取两个变量的较小值。
对于这样的函数调用,要养成一个好的习惯:把min()直接作为函数参数
example1:
int nLen1= GetSomeLength()
int nLen2 = min(x,bufLen);
memcpy(ptr1, ptr2, nLen2)
example2:
memcpy(ptr1, ptr2, min(bufLen, GetSomeLenght) )
example2 要优于exaple1,这是因为example1容易错误地写成这样的格式:memcpy(ptr1, ptr2, nLen1)
由于变量名都很相似,这种错误不容易发现。
2。 比较操作符的使用
unsigned int x=2;
unsigned int y=3;
if(x-y <0 )
{
do something
}
if 语句中的永远都不会执行到。
这是因为两个无符号数相减得到的仍然是无符号数
好的习惯是:
1)当变量可能需要比较大小或者出现负数时,尽量不要用 unsigned int。
2) 把编译器对无符号有符号比较的警告提升为错误。
3) 显式地使用类型转换
3。尽量多使用ASSERT()宏,尤其是在函数的开始检查参数的正确性。
ASSERT() 宏在Release模式下不生效,所以放心地使用。应该习惯于使用ASSERT().
实际经验指出,ASSERT()宏能极大地帮助发现错误。
对于数组下标一定要使用ASSERT宏检查是否越界。
这篇关于如何避免写代码过程中一些不必要的手误----一点经验跟看法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!