ASSERT技巧的一些總結

2021-06-23 05:02:29 字數 968 閱讀 8429

技巧一:嵌入更多的提示資訊

通常我們使用assert(pstr),來在指標為空時,提示我們。但是這種方式的提示不夠明顯,我們也很難立刻找到是**出了問題。我們可以在assert中加入一些資訊,幫助我們立刻找到錯誤的地方。

如:assert(pstr && "函式名:錯誤資訊描述");

上面加入了一些提示資訊後,我們在指標為空,就會提示相應的資訊。

技巧二:嵌入更多更多的資訊

通常我們想在程式執行到某個意料之外的地方,做出一些提示,使用assert(0)。還是那句話,這些資訊不夠。

我們可以這樣:assert(!"這個地方按理不應該被執行");

通過取反某一字串,而提示更多的資訊。

技巧三:更好的使用assert

根據技巧一和技巧二,我們可以

#define assert(a,b)      assert((a) && (b))

技巧一可以變為:assert(pstr,"

函式名:錯誤資訊描述");

技巧二可以變為:assert(0,"

這個地方按理不應該被執行");

技巧四:定義自己的巨集函式

標準c的斷言有乙個非常讓人討厭的問題:他會在偵錯程式裡中斷**到assert.c檔案,而不是你程式中斷言出現的行。我們可以編寫自己的assert巨集,偵錯程式可以直接中斷到輸入斷言的行,避免了無意義的堆疊跟蹤。

如下:#if defined(_debug)

extern bool customassertfunction(bool,char* ,int, char*);

#define assert(exp, description) \

if( customassertfunction( (int) (exp),description, __line__, __file__ )) \

} #else

#define assert( exp, description)

#endif

集合的一些技巧總結

集合的一些技巧 需要唯一嗎?需要 set 需要制定順序 需要 treeset 不需要 hashset 但是想要乙個和儲存一致的順序 有序 linkedhashset 不需要 list 需要頻繁增刪嗎?需要 linkedlist 不需要 arraylist 如何記錄每乙個容器的結構和所屬體系呢?看名字...

一些常用的演算法技巧總結

一些常用的演算法技巧總結 給定兩個字串 s 和 t 編寫乙個函式來判斷 t 是否是 s 的字母異位詞。示例 1 輸入 s anagram t nagaram 輸出 true 示例 2 輸入 s rat t car 輸出 false 說明 你可以假設字串只包含小寫字母。public boolean i...

常用的一些SQL技巧歸納總結

這幾天在寫索引,想到一些有意思的 tips 希望大家有收穫。一 一些常見的 sql實踐 1 負向條件查詢不能使用索引 not in not exists 都不是好習慣 可以優化為 in查詢 2 前導模糊查詢不能使用索引 而非前導模糊查詢則可以 3 資料區分度不大的字段不宜使用索引 原因 性別只有男,...