斷言assert是乙個巨集,該巨集在<assert>中,,當使用assert時候,給他個引數,即乙個判讀為真的表示式。預處理器產生測試該斷言的**,如果斷言不為真,則發出乙個錯誤資訊告訴斷言是什麼以及它失敗一會,程式會終止。 我們一般可以用在判斷某件操作是否成功上。
以下是乙個記憶體複製程式,在執行過程中,如果assert的引數為假,那麼程式就會中止(一般地還會出現提示對話,說明在什麼地方引發了assert)。
//複製不重疊的記憶體塊
void memcpy(void *pvto, void *pvfrom, size_tsize)
assert不是乙個倉促拼湊起來的巨集,為了不在程式的debug版本和release版本引起差別,assert不應該產生任何***。所以assert不是函式,而是巨集。程式設計師可以把assert看成乙個在任何系統狀態下都可以安全使用的無害測試手段。
以下是使用斷言的幾個原則:
1)使用斷言捕捉不應該發生的非法情況。不要混淆非法情況與錯誤情況之間的區別,後者是必然存在的並且是一定要作出處理的。
2)使用斷言對函式的引數進行確認。
3)在編寫函式時,要進行反覆的考查,並且自問:「我打算做哪些假定?」一旦確定了的假定,就要使用斷言對假定進行檢查。
4)一般教科書都鼓勵程式設計師們進行防錯性的程式設計,但要記住這種程式設計風格會隱瞞錯誤。當進行防錯性程式設計時,如果「不可能發生」的事情的確發生了,則要使用斷言進行報警。
assert 斷言函式 巨集
編寫 時,我們總是會做出一些假設,斷言就是用於在 中捕捉這些假設,可以將斷言看作是異常處理的一種高階形式。斷言表示為一些布林表示式,程式設計師相信在程式中的某個特定點該表示式值為真。可以在任何時候啟用和禁用斷言驗證,因此可以在測試時啟用斷言,而在部署時禁用斷言。同樣,程式投入執行後,終端使用者在遇到...
C C 中的assert 巨集 斷言機制
assert 是乙個除錯程式時經常使用的巨集,在程式執行時它計算括號內的表示式,如果表示式為false 0 程式將報告錯誤,並終止執行。如果表示式不為0,則繼續執行後面的語句。這個巨集通常原來判斷程式中是否出現了明顯非法的資料,如果出現了終止程式以免導致嚴重後果,同時也便於查詢錯誤。原型定義 inc...
乙個超級巨集
近日看別人的開源 遇到乙個巨集,此巨集初看嚇我一跳。這個巨集如何展開呢?牛人寫的 這麼有技巧,開源?民間?俗話說高手在民間啊!先上兩個圖看看 為了弄清楚如何展開,我們小心翼翼代進去試試。整個 貼過去就看到如下圖了 是不是看出些什麼了?實在還沒看懂再簡化一下 int int main int,char...