1. 程式人生 > >理解 assert()斷言

理解 assert()斷言

標頭檔案:assert.h
assert即斷言,也即做出一些假設,程式執行時如果假設不成立,程式就會中斷。沒有很多除錯經驗,可能不太理解斷言在哪會用到,實際上我們在除錯一個出錯的程式時,由於程式出錯的位置往往不是錯誤起因的位置,我們需要追溯錯誤的起源,就需要在前方的一定位置確保某個變數的值符合一定的條件。 比如VS有區域性陣列變數越界訪問檢查機制,如果函式中的陣列被越界訪問,在函式結束時會報錯,但是我們並不知道具體是在哪次訪問中越界了,我們可以在每次訪問前用assert斷言陣列下標變數的值小於陣列大小,這樣如果發生越界訪問就可以確定其具體位置。
百度百科中列舉的一些使用斷言的位置:
1.可以在預計正常情況下程式不會到達的地方放置斷言 :assert false
2.斷言可以用於檢查傳遞給私有方法的引數。(對於公有方法,因為是提供給外部的介面,所以必須在方法中有相應的引數檢驗才能保證程式碼的健壯性)
3.使用斷言測試方法執行的前置條件和
後置條件
4.使用斷言檢查類的不變狀態,確保任何情況下,某個變數的狀態必須滿足。(如age屬性應大於0小於某個合適值)