零缺陷编程读书笔记(三)自己设计并使用断言(1)

1

该语句在多数情况下都会工作得很好,除非 malloc的调用产生失败。当 malloc失败时,就会给 memcpy返回一个 NULL指针。由于 memcpy处理不了 NULL指针,所以出现了错误。

 

编译程序查不出这种或其他类似的错误。同样,编译程序也查不出算法的错误,无法验证程序员所作的假定。或者更一般地,编译程序也查不出所传递的参数是否有效。寻找这种错误非常艰苦,只有技术非常高的程序员或者测试者才能将它们根除并且不会引起其他的问题。

 

2 两个版本的故事

1

/* memcpy  ─── 拷贝不重叠的内存块  */

void memcpy(void* pvTo, void* pvFrom, size_t size)

{

 void* pbTo = (byte*)pvTo;

 void* pbFrom = (byte*)pvFrom;

 if(pvTo == NULL | | pvFrom == NULL)

{

fprintf(stderr,  Bad args in memcpy\n );

abort();

}

 while(size-->0)

  *pbTo++ == *pbFrom++;

 return(pvTo);

}

 

2

void memcpy(void* pvTo, void* pvFrom, size_t size)

{

 void* pbTo = (byte*)pvTo;

 void* pbFrom = (byte*)pvFrom;

 #ifdef DEBUG

 if(pvTo == NULL | | pvFrom == NULL)

{

fprintf(stderr,  Bad args in memcpy\n );

abort();

}

 #endif

 while(size-->0)

  *pbTo++ == *pbFrom++;

 return(pvTo);

}

 

这种想法是同时维护调试和非调试即交付两个版本。

这种方法的关键是要保证调试代码不在最终产品中出现。

 

既要维护程序的交付版本,又要维护程序的调试版本。

 

 转载请注明原创连接:http://blog.csdn.net/wujunokay/article/details/17723205

 

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值