这句话是什么意思? #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”是啥意思?