assert (CRT)
評估運算式,結果是false、 列印診斷訊息,並中止程式。
void assert(
int expression
);
參數
- expression
運算式 (包括 「 指標 」) 會傳回非零或者是 0。
備註
assert巨集通常用來識別邏輯錯誤在程式開發期間,藉由實作expression引數,以判定為false只有當程式的運作方式不正確。偵錯完畢後,檢查判斷提示就可以關閉而不需要修改原始程式檔,藉由定義識別項NDEBUG。NDEBUG您可以定義與/D命令列選項或#define指示詞。如果NDEBUG定義的#define,指示詞必須出現在 [判斷提示之前。包含了 H。
assert診斷訊息何時沖印expression會評估為false (0) 和呼叫中止終止執行程式。如果不做任何動作expression是true (非零)。診斷訊息會包含失敗的運算式,判斷提示已失敗的位置的原始程式檔和行號的名稱。
診斷訊息列印以寬字元為單位。因此,它將會如預期般運作即使運算式中的 Unicode 字元。
診斷訊息的目的地是根據呼叫常式的應用程式類型而定。主控台應用程式一定會收到訊息,透過stderr。在 Windows 架構應用程式中, assert呼叫 Windows MessageBox 函式來建立訊息方塊顯示的訊息,以及確定 ] 按鈕。當使用者按一下確定,程式會立即中止。
應用程式的執行階段程式庫的偵錯版本連結時assert會建立具有三個按鈕的訊息方塊: 中止, 再試一次,以及略過。如果使用者按一下中止,程式會立即中止。如果使用者按一下再試一次、 偵錯工具會呼叫,以及使用者可以偵錯程式,如果只是即時 (JIT) 偵錯已啟用。如果使用者按一下 [ 略過, assert繼續執行其正常性執行: 建立訊息方塊,以確定按鈕。請注意,按一下 [ 略過的錯誤情況存在時可能會導致未定義的行為。
如需有關 CRT 偵錯的詳細資訊,請參閱 CRT 偵錯技巧。
assert常式是用於 c 執行階段程式庫的發行和偵錯版本。其他兩個判斷提示巨集, _ASSERT 和 _asserte 的判斷提示,也可以,但它們只能評估運算式時傳遞給他們 _DEBUG 巳經定義了旗標。
需求
常式 |
所需的標頭 |
---|---|
assert |
<assert.h> |
範例
在此程式中, analyze_string函式使用assert測試幾個條件的函式相關字串長度。如果任一條件失敗時,程式就會列印訊息,指出所造成的失敗。
// crt_assert.c
// compile with: /c
#include <stdio.h>
#include <assert.h>
#include <string.h>
void analyze_string( char *string ); // Prototype
int main( void )
{
char test1[] = "abc", *test2 = NULL, test3[] = "";
printf ( "Analyzing string '%s'\n", test1 ); fflush( stdout );
analyze_string( test1 );
printf ( "Analyzing string '%s'\n", test2 ); fflush( stdout );
analyze_string( test2 );
printf ( "Analyzing string '%s'\n", test3 ); fflush( stdout );
analyze_string( test3 );
}
// Tests a string to see if it is NULL,
// empty, or longer than 0 characters.
void analyze_string( char * string )
{
assert( string != NULL ); // Cannot be NULL
assert( *string != '\0' ); // Cannot be empty
assert( strlen( string ) > 2 ); // Length must exceed 2
}
.NET Framework 對等用法
System::Diagnostics::Debug:: 判斷提示