#define assert_param(expr) ((void)0) 这是个宏定义,但是我真是不知道(void)0能执行什么操作
来源:互联网 发布:压力对大学生好处 数据 编辑:程序博客网 时间:2024/06/05 13:21
问题:#define assert_param(expr) ((void)0) 这是个宏定义,但是我真是不知道(void)0能执行什么操作具体的定义和用法在下面void MY_NVIC_SetVectorTable(u32 NVIC_VectTab,u32 Offset){ assert_param(IS_NVIC_VECTTAB(NVIC_VectTab)); assert_param(IS_NVIC_OFFSET(Offset)); SCB->VTOR=NVIC_VectTab|(Offset&(u32)0x1FFFFF80);}答案:这是断言机制。意思是在关闭断言的情况下,
void MY_NVIC_SetVectorTable(u32 NVIC_VectTab,u32 Offset){ assert_param(IS_NVIC_VECTTAB(NVIC_VectTab)); assert_param(IS_NVIC_OFFSET(Offset)); SCB->VTOR=NVIC_VectTab|(Offset&(u32)0x1FFFFF80);}就相当于:void MY_NVIC_SetVectorTable(u32 NVIC_VectTab,u32 Offset){ (void)0; // 不执行任何操作,对程序也没有副作用 (void)0; // 不执行任何操作,对程序也没有副作用 SCB->VTOR=NVIC_VectTab|(Offset&(u32)0x1FFFFF80);}由于你的这个断言没贴完整,我就拿VC++6.0下的断言来说明把。在VC++6.0下的assert.h中:#ifdef NDEBUG #define assert(exp) ((void)0)#else#define assert(exp) (void)( (exp) || (_assert(#exp, __FILE__, __LINE__), 0) )如果你写的代码中使用了断言,比如:assert(i>=0);那么这句的在程序中的作用分两种情况:1. 若果在assert.h被包含之前NDEBUG这个宏未定义,assert(exp) 就被定义为(void)( (exp) || (_assert(#exp, __FILE__, __LINE__), 0) )。这样当i<0时,i>=0这个表达式为假,所以程序就会终止。并通知程序员发生错误的文件位置和代码行。但是错误信息仅仅对程序员有用。对用户来说,程序异常终止就显得不是那么友好了(用户此时需要的是挽回错误)。所以在发布给用户的程序中,assert(断言)要关闭。在VC++6.0下这是通过在包含assert.h头文件之前定义NDEBUG实现的。2.在定义了NDEBUG的情况下,断言不应该给程序带来副作用。这样断言就被定义为:#define assert(exp) ((void)0)此时,assert(i>=0);不管括号中表达式为真还是为假,这一行代码其实相当于:NULL;意思是不执行任何操作
0 0
- #define assert_param(expr) ((void)0) 这是个宏定义,但是我真是不知道(void)0能执行什么操作
- stm32f10x_conf.h 的 #define assert_param(expr) ((void)0)
- 理解宏:#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
- #define assert_param(expr)
- javascript void 0 什么意思
- javascript void 0 什么意思?
- javascript void 0 什么意思
- (*void (*) () ) 0) ();
- (void*)0
- void 0
- (*(void (*)( ) )0)( )
- (*(void (*) ()) 0) ();
- C表达式((void (*)(void))0();
- javascript 中的 void(0) 是指什么
- JavaScript:void(0)有什么用
- javascript:void(0)有什么作用?
- void (*func)(int) 知道这样定义这个函数什么意思么?
- 解析#define NULL ((void *)0)——野指针,空指针和 void*
- [转载] 注册表实用详解(3)
- multi-process & cpu with multi-cores
- 【学习笔记】Effective Java 第二条:用私有构造函数强化singleton属性
- ubuntu下spring环境搭建
- C++11 新特性
- #define assert_param(expr) ((void)0) 这是个宏定义,但是我真是不知道(void)0能执行什么操作
- 编程语言系列(五)--python语言基础知识点总结
- [转载] 注册表实用详解(4)
- 禅道——测试流程
- 两个指头同时点击cell上button崩溃的问题
- Linux 时间设置
- Leetcode 线性表 Merge k Sorted Lists
- tomcat部署web
- javascript Date format(js日期格式化)