日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 人文关怀 >内容正文

人文关怀

assert_param是干什么用的(assert_param)

發布時間:2023/11/21 人文关怀 30 博士
生活随笔 收集整理的這篇文章主要介紹了 assert_param是干什么用的(assert_param) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家好,小聯來為大家解答以上的問題。assert_param是干什么用的,assert_param這個很多人還不知道,現在讓我們一起來看看吧!

1、這是斷言機制。

2、意思是在關閉斷言的情況下,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下的斷言來說明把。

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、這樣當i=0這個表達式為假,所以程序就會終止。

5、并通知程序員發生錯誤的文件位置和代碼行。

6、但是錯誤信息僅僅對程序員有用。

7、對用戶來說,程序異常終止就顯得不是那么友好了(用戶此時需要的是挽回錯誤)。

8、所以在發布給用戶的程序中,assert(斷言)要關閉。

9、在VC++6.0下這是通過在包含assert.h頭文件之前定義NDEBUG實現的。

10、2.在定義了NDEBUG的情況下,斷言不應該給程序帶來副作用。

11、這樣斷言就被定義為:#define assert(exp) ((void)0)此時,assert(i>=0);不管括號中表達式為真還是為假,這一行代碼其實相當于:NULL;意思是不執行任何操作。

本文到此分享完畢,希望對大家有所幫助。

總結

以上是生活随笔為你收集整理的assert_param是干什么用的(assert_param)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。