Visual C 中的斷言

2021-04-20 13:31:13 字數 1219 閱讀 3046

斷言語句指定在程式的某些特定點應為真的條件。如果該條件不為真,則斷言失敗,中斷程式的執行,並顯示「斷言失敗」對話方塊。

visual c++ 支援基於下列構造的斷言語句: 

mfc 程式的 mfc 斷言。 

使用 atl 的程式的 atlassert。 

使用 c 執行時庫的程式的 crt 斷言。 

其他 c/c++ 程式的 ansi assert 函式。 

斷言可以用於: 

捕捉邏輯錯誤。 

檢查某操作的結果(檢查結果)。 

測試錯誤條件,這些錯誤條件應已處理。 

mfc 和 c 執行時庫斷言

當偵錯程式由於 mfc 或 c 執行時庫斷言而暫停時,它定位到原始檔中的斷言發生點(如果源可用)。斷言訊息顯示在「輸出」視窗以及「斷言失敗」對話方塊中。如果希望儲存斷言訊息以供將來參考,可以將斷言訊息從「輸出」視窗複製到某個文字視窗。「輸出」視窗可能還包含其他錯誤資訊。請仔細檢查這些訊息,因為它們提供了有關確定斷言失敗原因的線索。

通過在**中大量使用斷言,可以在開發期間捕捉許多錯誤。為所做的每個假定編寫乙個斷言是很好的規則。例如,如果假定某個引數不為 null,請使用一條斷言語句檢查該假定。

_debug

僅當定義了 _debug 時斷言語句才編譯。未定義 _debug 時,編譯器將斷言作為空語句處理。因此,斷言語句在最終發布程式中系統開銷為零;可以在**中大量使用斷言語句,而不影響「release」版本的效能,並且不必使用 #ifdef。

使用斷言的***

當向**新增斷言時,請確保這些斷言沒有***。例如,考慮以下斷言:

assert(nm++ > 0); -- don't do this!

因為在程式的「release」版本中不計算 assert 表示式,所以 nm 在「debug」版本和「release」版本中會有不同值。在 mfc 中,可以使用 verify 巨集代替 assert。在「release」版本中,verify 計算該表示式,但不檢查結果。

在斷言語句中使用函式呼叫時應特別小心,因為計算函式可能會有意外的***。

assert ( myfnctn(0)==1 ) –- unsafe if myfnctn has side effects

verify ( myfnctn(0)==1 ) –- safe

verify 在「debug」版本和「release」版本中都呼叫 myfnctn,因此使用它較安全。但在「release」版本中仍會有因不必要的函式呼叫而產生的系統開銷。

Python中的斷言

在python中,做出斷言的語句是assert,assert後面跟任何合法的表示式,assert語句做出乙個判斷,如果結果為true,則該語句不做任何事情,如果結果為false,assert語句會丟擲異常assertionerror,這個丟擲異常很有作用,我們可以在assert語句後加上解釋性語句,...

Junit中的斷言

asserttrue string message,boolean condition 執行結果是否為true assertfalse string message,boolean condition 執行結果是否為false assertequals string message,object e...

Visual C 中的ODBC程式設計

一 mfc提供的odbc資料庫類 visual c 的mfc基類庫定義了幾個資料庫類。在利用odbc程式設計時,經常要使用到 cdatabase 資料庫類 crecordset 記錄集類 和crecordview 可視記錄集類 cdatabase類物件提供了對資料來源的連線,通過它可以對資料來源進行...