Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1082049
  • 博文数量: 135
  • 博客积分: 10182
  • 博客等级: 上将
  • 技术积分: 1565
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-07 16:05
文章分类

全部博文(135)

文章存档

2011年(5)

2010年(20)

2009年(3)

2008年(16)

2007年(91)

分类: C/C++

2008-03-15 15:04:07

原本以为assert是C++中的东东,没想到C里就有。:-)
 
assert() 是个定义在  中的宏, 用来测试断言。一个断言本质上是写下程序员的假设, 如果假设被违反, 那表明有个严重的程序错误。例如, 一个假设只接受非空指针的函数, 可以写:
    assert(p != NULL);
一个失败的断言会中断程序。断言不应该用来捕捉意料中的错误, 例如  malloc() 或 fopen() 的失败。
 
 
不是用来检查错误的
 
当程序员刚开始使用断言时,有时会错误地利用断言去检查真正地错误,而不去检查非法的情况。看看在下面的函数strdup中的两个断言:
char* strdup(char* str)
{
    char* strNew;
    assert(str != NULL);
    strNew = (char*)malloc(strlen(str)+1);
    assert(strNew != NULL);
    strcpy(strNew, str);
    return(strNew);
}
第一个断言的用法是正确的,因为它被用来检查在该程序正常工作时绝不应该发生的非法情况。第二个断言的用法相当不同,它所测试的是错误情况,是在其最终产品中肯定会出现并且必须对其进行处理的错误情况。
 
阅读(3420) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~