易截截图软件、单文件、免安装、纯绿色、仅160KB

读《微软C编程精粹》的一些收获

-  要使用断言对函数参数进行确认
-  为了不必要的开销,可以仅使用断言,而不要return
    网上有人写的strcpy代码,做了太多的出错处理,导致性能低下,其实没必要,用assert就行了,这样在debug模式下能捕捉错误,release下又不影响性能。
- 书上提供的memcpy的范例
void memcpy(void* pvTo, void* pvfrom, size_t size)
{
 void* pbTo = (byte*)pvTo;
 void* pbfrom = (byte*)pvfrom;
 ASSERT(pvTo != NULL && pvfrom != NULL);
 /* 内存块重叠吗?如果重叠,就使用memmove */
 ASSERT(pbTo>=pbfrom+size || pbfrom>=pbTo+size);
 while(size-->0)
  *pbTo++ == *pbfrom++;
 return(pvTo);
}
- 不使用ASSERT的危害
这个小组的代码与Word代码之间一个明显的区别是Word代码从过去到现在一直都使用断言和调试代码,而他们的代码却几乎没有使用断言。因此,其程序员没有什么好的办法可以确定其代码中的实际错误情况,错误只能慢慢地暴露出来。如果他们在代码中使用了断言,这些错误本该在几个月之前就被检查出来。
同样,xeyez由于没有使用Debug版,导致了很多的内存错误在客户的电脑上暴漏了出来。
- 一个错误的使用ASSERT的例子
char* strdup(char* str)
{
 char* strNew;
 ASSERT(str != NULL);
 strNew = (char*)malloc(strlen(str)+1);
 ASSERT(strNew != NULL);  // 这里使用错误
 strcpy(strNew, str);
 return(strNew);
}
第一个断言的用法是正确的,因为它被用来检查在该程序正常工作时绝不应该发生的非法情况。第二个断言的用法相当不同,它所测试的是错误情况,是在其最终产品中肯定会出现并且必须对其进行处理的错误情况。
虽然这一程序更精确地反应了相应的算法,但有经验的程序员很少会这样编码。否则好机会就来了,我们可以把他们塞进一辆既没有安全带又没有车门的双人Cessna车中。上面的程序使人感到太危险了。
在该函数的交付版本中,相应的防错措施可以保证当出了毛病时,用户可以不受损失;而在该函数的调试版本中,错误仍然可以被报告出来。


相关文档:

堆栈的C代码实现

2009-09-13     16:42:43  
 今天实现堆栈结构部分的代码,并用一简单程序测试成功。
stack.h:
#ifndef _STACK_H_
#define _STACK_H_
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#define STACK_INIT_SIZE 5
#define STACKINCREMENT 5
t ......

ECLIPSE 开发 C/C++ 工程

  最近一个朋友准备把C代码在ECLIPSE上编译,以前一直搞的JAVA,也知道ECLIPSE支持C工程,但是自己从来没搞过,所以就自己先从网络上找资料,主要方法如下
1、安装JDK和Eclipse
这里就不多说,具体请见:http://blog.chinaunix.net/u/16292/showart_223309.html
我的安装环境是jdk1.5,eclipse3.2.1
2、安装C++的E ......

c宏定义的技巧总结


http://blog.csdn.net/eroswang/archive/2009/06/12/4265046.aspx
1,防止一个头文件被重复包含
#ifndef COMDEF_H
#define COMDEF_H
//头文件内容
#endif
2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。
typedef unsigned char      boolea ......

c宏定义的技巧总结


1,防止一个头文件被重复包含
#ifndef COMDEF_H
#define COMDEF_H
//头文件内容
#endif
2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。
typedef unsigned char      boolean;     /* Boolean value type. */
typedef ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号