assert_param是干什么用的(assert_param)
大家好,小聯(lián)來為大家解答以上的問題。assert_param是干什么用的,assert_param這個很多人還不知道,現(xiàn)在讓我們一起來看看吧!
1、這是斷言機(jī)制。
2、意思是在關(guān)閉斷言的情況下,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);}就相當(dāng)于:void MY_NVIC_SetVectorTable(u32 NVIC_VectTab,u32 Offset){ (void)0; // 不執(zhí)行任何操作,對程序也沒有副作用 (void)0; // 不執(zhí)行任何操作,對程序也沒有副作用 SCB->VTOR=NVIC_VectTab|(Offset&(u32)0x1FFFFF80);}由于你的這個斷言沒貼完整,我就拿VC++6.0下的斷言來說明把。
3、在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) )。
4、這樣當(dāng)i=0這個表達(dá)式為假,所以程序就會終止。
5、并通知程序員發(fā)生錯誤的文件位置和代碼行。
6、但是錯誤信息僅僅對程序員有用。
7、對用戶來說,程序異常終止就顯得不是那么友好了(用戶此時需要的是挽回錯誤)。
8、所以在發(fā)布給用戶的程序中,assert(斷言)要關(guān)閉。
9、在VC++6.0下這是通過在包含assert.h頭文件之前定義NDEBUG實(shí)現(xiàn)的。
10、2.在定義了NDEBUG的情況下,斷言不應(yīng)該給程序帶來副作用。
11、這樣斷言就被定義為:#define assert(exp) ((void)0)此時,assert(i>=0);不管括號中表達(dá)式為真還是為假,這一行代碼其實(shí)相當(dāng)于:NULL;意思是不執(zhí)行任何操作。
本文到此分享完畢,希望對大家有所幫助。
總結(jié)
以上是生活随笔為你收集整理的assert_param是干什么用的(assert_param)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 银行承兑汇票贴现会计处理分录(银行承兑汇
- 下一篇: 开心搞笑的小故事(搞笑的小故事)