博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
断言函数的用法
阅读量:6679 次
发布时间:2019-06-25

本文共 1008 字,大约阅读时间需要 3 分钟。

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

#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),运行了一句空命令行

转载于:https://www.cnblogs.com/qingyunboke/p/10062125.html

你可能感兴趣的文章
Build RESTful APIs with Spring MVC: Testing
查看>>
关于那些最好玩的户外APP合集下(适合资深驴友、牛逼设计狮、装逼攻城狮)...
查看>>
syslog本地和远程日志分离
查看>>
ISCSI共享存储配置跟parted命令简述
查看>>
SysUtils.WrapText - 换行
查看>>
静态路由与浮动路由的配置
查看>>
实现一个日期类
查看>>
安装Oracle 11g R2 单实例数据库(非asm)
查看>>
linux-wget命令笔记
查看>>
Java 内存分配全面浅析
查看>>
JVM(6)之 二次标记
查看>>
c++实现线性表增删改查
查看>>
JVM内存模型及垃圾收集策略解析
查看>>
java获取项目classPath路径
查看>>
Add Swap on Ubuntu
查看>>
android 介绍Retrofit的简单使用
查看>>
##宏—紧跟
查看>>
把你开发的网站免费发布到互联网上
查看>>
数学函数
查看>>
js获取链接地址
查看>>