这句话是什么意思? #define assert_param(expr) ((void)0)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这句话是什么意思? #define assert_param(expr) ((void)0)相关的知识,希望对你有一定的参考价值。

参考技术A 当这个函数原型在主函数后面时,需要在主函数前面对该函数进行声明,该函数无操作。 参考技术B 这句话明显用来调试的, 本身就是用来不做任何东西的。因为 0;没有任何意义

在调试版本时它将定义成其他样,此时就有意义本回答被提问者采纳
参考技术C

/* Exported types       导出类型--------------------------------------------------------*/
/* Exported constants   导出常数--------------------------------------------------------*/

/* Uncomment the line below to expanse the "assert_param" macro in the Standard Peripheral Library drivers code */
/*取消下面的行(注释)  , 来 扩展 “assert_param” 宏  (在标准外围设备库 驱动代码中)*/
/* #define USE_FULL_ASSERT    1 */


/* Exported macro       导出宏------------------------------------------------------------*/
#ifdef  USE_FULL_ASSERT  
/**
  * @brief  The assert_param macro(断言参数的宏) is used for function's parameters check(被用作函数参数检测).
  
  * @param  expr: If expr is false, it calls assert_failed function (如果expr为假,该处会调用断言失败函数)
                        which reports the name of the source file and the source line number of the call that failed. (断言失败函数 会导出源文件的名称和错误的那一行代码)
  *               If expr is true, it returns no value.(如果expr为真,他会返回(void)0)
  * @retval None
  */
  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
  
  /* Exported functions ------------------------------------------------------- */
  void assert_failed(uint8_t* file, uint32_t line);
#else
  #define assert_param(expr) ((void)0)

#endif 
/* USE_FULL_ASSERT */

看看这个定义的地方就会发现,这里是关闭了断言的功能,不进行任何操作。(相当于你来什么参数,我都认为是真,然后返回“无值”,也就是(void)0)

这个问题过去很久了,我也是遇到这个问题,想要分享一下自己的看法。么么哒

以上是关于这句话是什么意思? #define assert_param(expr) ((void)0)的主要内容,如果未能解决你的问题,请参考以下文章

#define assert_param(expr) ((void)0) 里面的“expr”是啥意思?

PHP中的ABSPATH是啥意思?

宏字符串:#define __T(x) x 是啥意思?和 __T(#x)?

assert一句话后门

assert一句话后门

关于c++中的assert语句