如何避免写代码过程中一些不必要的手误----一点经验跟看法

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宏检查是否越界。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值