• 断言函数的用法



    断言语句用于程序调试阶段,测试数据是否正常,调试完毕后,注释掉宏定义,以提高程序运行速度

    #define USE_FULL_ASSERT 1
    ifdef USE_FULL_ASSERT
      #define EFM_ASSERT(expr) ((expr) ? ((void)0) : assertEFM(__FILE__, __LINE__))
      //assert_param(expr),断言函数,判定expr是不是0(或者空),如果为非0或空,执行语句(void)0,这是一个相当于空语句的表达式,不对程序产生任何影响。如果是0或空,那么调用assert_failed函数(终止程序,并打印文件名和行号)。
      //编译器内置宏: FILE, LINE,绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息。编译器在进行源码编译的时候,会自动将这些宏替换为相应内容。
      ANSI C标准中有几个标准预定义宏(也是常用的)


        LINE:在源代码中插入当前源代码行号


        FILE:在源文件中插入当前源文件名


        DATE:在源文件中插入当前的编译日期


        TIME:在源文件中插入当前编译时间


        STDC:当要求程序严格遵循ANSIC标准时该标识被赋值为1

      void assertEFM(uint8_t* file, uint32_t line); //打印输出文件名和行号
    else
      #define EFM_ASSERT(expr) ((void)0) //运行空命令行
    endif

      调试程序时宏定义好USE_FULL_ASSERT时,系统运行函数EFM_ASSERT(expr) 时会自动运行命令EFM_ASSERT(expr) ((expr) ? ((void)0) : assertEFM(__FILE__, __LINE__)) 如果检测到expr为非真则运行,assertEFM(__FILE__, __LINE__))输出文件名和行号
      调试程序时若没有宏定义USE_FULL_ASSERT,系统运行函数EFM_ASSERT(expr) ((void)0),运行了一句空命令行

  • 相关阅读:
    iptables 常用命令解析
    iptables 常用处理动作
    centos7 中iptables、firewalld 和 netfilter 的关系
    iptables 的几个状态
    centos7 中没有service iptables save指令来保存防火墙规则
    iptables 数据走向流程
    数据库PDO简介
    php连接mySql,加密函数
    php数组,常量,遍历等
    php的会话控制
  • 原文地址:https://www.cnblogs.com/qingyunboke/p/10062125.html
Copyright © 2020-2023  润新知