断言机制2

来源:互联网 发布:mac ps批量处理图片 编辑:程序博客网 时间:2024/06/06 19:16

用STM官方库的时候,要进行API调用参数检测。这个功能可以用一个宏定义来开启或者关闭。
自己看
#ifdef  USE_FULL_ASSERT
  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
  void assert_failed(uint8_t* file, uint32_t line);
#else
  #define assert_param(expr) ((void)0)
#endif 
你的问题是,没有打开的话,原先的API函数里面的校验功能为关闭
关闭就是assert_param(expr) 这个函数  定义为空函数

这是一种常见的软件技术,可以在调试阶段利用编译器的检验功能,帮助程序员始终选择有效的参数。


所谓有效的参数是指满足规定范围的参数,比如某个参数的取值范围只能是小于3的正整数,如果给出的参数大于3,则这个assert_param()可以在编译时报告错误,使程序员可以及时发现错误,而不必等到运行程序时,因为程序运行错误而大费周折。

它确实在程序的运行上牺牲了效率(但只是在调试阶段),但在项目的开发上却帮助你提高了效率。

当你的项目开发成功,使用release模式编译之后,所有的assert_param()检验都消失了,不会影响最终程序的运行效率。
0 0