美文网首页C语言基础
C语言 assert 函数 - C语言零基础入门教程

C语言 assert 函数 - C语言零基础入门教程

作者: 猿说编程 | 来源:发表于2021-11-07 11:35 被阅读0次

    目录

    零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

    一.assert 函数简介

    对于断言,相信大家都不陌生,大多数编程语言也都有断言这一特性。简单地讲,断言就是对某种假设条件进行检查。assert 宏原型定义:

    //需要包含头文件 <assert.h>
    #include <assert.h>
    
    /*
     描述:如果它的条件返回错误,则终止程序执行
    
     参数:
        expression : 条件判断或者表达式
     */
    
    void assert( int expression );
    

    assert 将通过检查表达式 expression 的值来决定是否需要终止执行程序。也就是说,如果表达式 expression 的值为假(即为 0),那么它将首先向标准错误流 stderr 打印一条出错信息,然后再通过调用 abort 函数终止程序运行;否则,assert 无任何作用。

    二.assert 函数使用

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:C语言教程 - C语言 assert 函数
    //@Time:2021/07/18 07:30
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    
    
    #include <stdio.h>
    #include <assert.h>
    #include <stdlib.h>
    int main( void )
    {
        FILE *fp;
    
        fp = fopen( "456.txt", "w" );//以可写的方式打开一个文件,如果不存在就创建一个同名文件
        assert( fp );                           //所以这里不会出错
        fclose( fp );
    
        fp = fopen( "123.txt", "r" );//以只读的方式打开一个文件,如果不存在就打开文件失败
        assert( fp );                           //所以这里出错
        fclose( fp );                           //程序永远都执行不到这里来
        return 0;
    }
    

    默认情况下,assert 宏只有在 Debug 版本(内部调试版本)中才能够起作用,而在 Release 版本(发行版本)中将被忽略。

    三.assert 函数用法总结与注意事项

    1.使用 assert 在函数开始处检验传入参数的合法性

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:C语言教程 - C语言 assert 函数
    //@Time:2021/07/18 07:30
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    
    
    int resetBufferSize(int nNewSize)
    {
      //功能:改变缓冲区大小,
      //参数:nNewSize 缓冲区新长度
      //返回值:缓冲区当前长度
      //说明:保持原信息内容不变     nNewSize<=0表示清除缓冲区
      assert(nNewSize >= 0);
      assert(nNewSize <= MAX_BUFFER_SIZE);
      ...
    }
    

    2.每个 assert 只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:C语言教程 - C语言 assert 函数
    //@Time:2021/07/18 07:30
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    
    
    //错误写法
    assert(a>=0 && b<=0 && c>0);
    
    //正确写法
    assert(a>=0);
    assert(b<=0);
    assert(c>0);
    

    3. assert 缺点是频繁的调用会极大的影响程序的性能,增加额外的开销。

    四.猜你喜欢

    1. C 语言 数组下标越界和内存溢出区别
    2. C 语言 使用指针遍历数组
    3. C 语言 指针和数组区别
    4. C 语言 指针数组和数组指针区别
    5. C 语言 野指针
    6. C 语言 函数值传递和址传递
    7. C 语言 函数不定长参数
    8. C 语言 函数指针
    9. C 语言 指针函数
    10. C 语言 回调函数 callback
    11. C 语言 #pragma once
    12. C 语言 #include <> 与 #include “” 区别
    13. C 语言 const 修饰函数参数
    14. C 语言 const 和 define 区别
    15. C 语言 #运算符
    16. C 语言 ##运算符
    17. C 语言 __VA_ARGS__
    18. C 语言 ##__VA_ARGS__
    19. C 语言 函数不定长参数 ##__VA_ARGS__经典案例
    20. C 语言 va_start 宏
    21. C 语言 va_end 宏
    22. C 语言 va_arg 宏
    23. C 语言 vprintf 函数
    24. C 语言 va_start / va_end / va_arg 自定义 printf 函数
    25. C 语言 main 函数
    26. C 语言 main 函数参数 main(int argc, char *argv[])
    27. C 语言 exit 函数
    28. C 语言 abort 函数
    29. C 语言 assert 函数

    未经允许不得转载:猿说编程 » C 语言 assert 函数

    本文由博客 - 猿说编程 猿说编程 发布!

    相关文章

      网友评论

        本文标题:C语言 assert 函数 - C语言零基础入门教程

        本文链接:https://www.haomeiwen.com/subject/rbcezltx.html