码迷,mamicode.com
首页 > 其他好文 > 详细

assert函数应用

时间:2019-05-01 01:17:22      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:条件判断   参数   赋值   void   初始化   额外   com   3.4   ``   

1 assert概念

??函数名:assert
??头文件:#include<assert.h>
??函数原形:void assert( int expression )

2 assert作用

??assert的作用是先计算expression表达式的值,如果计算结果为真,继续运行下面的程序;如果计算结果为假,则程序终止运行。
??assert函数主要是检测程序的未知错误。比如对指针操作时指针是否为NULL;某个变量是否符合预定范围等等

3 assert用法

3.1 检测调用者传过来的指针参数是否正常

void test(int* p)
{
    assert(p != NULL);//用来判断调用者传过来的指针参数是否为空
    /*函数体*/
}
延伸:上面判断指针是否为空,前提条件是
1 定义指针时就要初始化为NULL,比如`int* p = NULL;`;
2 释放指针变量后也要把指针赋值为NULL,比如:
```
free(p);
p = NULL;
```

3.2 判断某个变量的范围

void test()
{
    int i = 0;
    /*
    *对i的相关操作,假设i小于32为有效范围
    */
    assert(i < 32);
    /*继续关于i的操作*/
}

??关于assert的使用,可以根据自己的需要使用在程序任何地方,用来检测程序的异常。但是,过多的使用asser函数,频繁调用会非常影响程序的性能,增加额外的开销。
??在调试结束后,可以通过在包含#include <assert.h>的语句之前插入 #define NDEBUG 来禁用assert调用,示例代码如下:

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

3.3 assert只检验一个地方

??同时检验多个条件,如果出现断言错误,不能分辨出是哪个条件判断错误,比如:

//错误
assert(i < 32 && i + temp < i_max);
//正确
assert(i < 32);
assert(i + temp < i_max);   

3.4 不能使用改变环境的语句

??因为assert只在DEBUG个生效,如果这么做,会使用程序在真正运行时遇到问题,如:

//错误
assert(i++ < 32);

??这是因为如果出错,比如在执行之前i=32,那么这条语句就不会执行,那么i++这条命令就没有执行。

//正确
assert(i < 32);
i++;

??assert和后面的语句应空一行,以形成逻辑和视觉上的一致感。

参考:assert()函数用法总结

assert函数应用

标签:条件判断   参数   赋值   void   初始化   额外   com   3.4   ``   

原文地址:https://www.cnblogs.com/MisterXu/p/10798785.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!