assert <assert.h> <cassert>
英文原文:https://www.cplusplus.com/reference/clibrary/cassert/assert/
void assert (int expression);
判定斷言
如果這個函數形式的宏的參數表達式等於0(例如,表達式值為false),一個消息將會寫到標準錯誤設備並且調用abort,終止程序運行。
顯示的詳細消息依賴於編譯器的具體實現,但是它應該包括:斷言失敗時的表達式,源文件名稱,斷言失敗出現時的行號。一個通常的格式是:
Assertion failed: expression, file filename, line line number
如果包含assert.h文件之前,一個宏NDEBUG已經定義了,那麼判斷斷言的宏就被禁用了。這就允許程序員在調試程序的時候,在源代碼中包含很多斷言調用,之後,在發布產品時簡單的包含下麵一行,就可以禁用所有宏。
#define NDEBUG
(放在源代碼中,包含assert.h文件之前。)
因此,這個宏通常被設計來捕捉程序錯誤,而不是用戶或者運行錯誤,而它通常在程序調試階段結束後被禁用。
參數
expression
待求值表達式。如果表達式等於0,將會導致斷言失敗,並且終止程序。
返回值
無
實例
/* assert example */ #include <stdio.h> #include <assert.h> void print_number(int* myInt) { assert (myInt!=NULL); printf ("%d\n",*myInt); } int main () { int a=10; int * b = NULL; int * c = NULL; b=&a; print_number (b); print_number (c); return 0; }
在本實例中,如果print_number被調用的時候,實參為一個空指針,那麼assert就會終止程序執行。這種情況發生在第二次調用print_number函數的時候,此時斷言失敗,提示這裏有BUG。
最後更新:2017-04-02 06:52:01