zoukankan      html  css  js  c++  java
  • assert函数应用

    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()函数用法总结

  • 相关阅读:

    java 线程池
    java 普通内部类和静态内部类
    JVM
    java httpUtil
    maven 常见问题
    计算java对象的内存占用
    HTML5简单入门系列(九)
    HTML5简单入门系列(八)
    HTML5简单入门系列(七)
  • 原文地址:https://www.cnblogs.com/MisterXu/p/10798785.html
Copyright © 2011-2022 走看看