assert

C 语言中assert.h头文件唯一的目的就是提供了assert宏的定义,这个被称为断言,断言的效果是,如果断言的内容为真,断言就没有任何意义,如果断言为假,程序将执行异常终止。

测试代码:

#include <stdio.h>
#include <assert.h>
int main(int argc,char** argv)
{
    assert(1);
    printf("it is OK.\n");
    assert(0>-5);
    printf("guess what?\n");
    assert(0);
    printf("now what?\n");
    return 0;
}//运行的话,会显示什么呢?

直接给答案:

it is OK.
guess what?
Assertion failed: 0, file c:\myc\main.c, line 9

第一个断言为真,所以没啥好讲的,第二个表面上看起来不是真,其实仍旧是真,因为C在做比较的时候会把参与比较的两个数作为无符号整数,所以,断言依旧为真。

第三个直接断言假,因此程序终止,并输出原因。

通常断言放在认为不可能出现的情况,如果这种情况真的发生了,我们宁可程序当场挂掉,也不希望它不健康地运行,当然,在实际使用的时候,还是在调试阶段使用,不要给用户提示这个。

与之相关的一个宏定义是NDEBUG,如果有这个宏定义,则断言就不活动了,相当于没有效果,切记,这个宏定义一定要放在#include <assert.h>之前才能起作用

#define NDEBUG
#include <stdio.h>
#include <assert.h>

int main(int argc,char** argv)
{
    assert(1);
    printf("it is OK.\n");
    assert(0>-5);
    printf("guess what?\n");
    assert(0);
    printf("now what?\n");
    return 0;
}

  类似这样。如果把这个定义放在了#include <assert.h>的后面,实际上是不起作用的。

posted @ 2020-08-28 23:32  castor_xu  阅读(209)  评论(0编辑  收藏  举报