assert (CRT)
當結果是 false,列印一個診斷資訊並中止程式時,會評估運算式。
void assert(
int expression
);
參數
- expression
運算式 (包括指標) 來評估為非零或 0。
備註
實作 expression 引數通常用於 assert 巨集識別邏輯錯誤在程式開發過程中評估為 false ,只在程式不正確時運作。 在偵錯完成後,檢查判斷提示可以被關閉,但不修改原始程式檔可以定義識別項的 NDEBUG。 NDEBUG 可以定義與 /D 的命令列選項或以 #define 指示詞。 如果 NDEBUG 定義的 #define,在包含 ASSERT.H 之前,指示詞必須顯示。
assert 列印一個診斷資訊,當 expression 評估為 false (0) 並呼叫 中止 終止程式執行。 如果 expression 為 true(非零),則不會採取任何動作。 診斷資訊包括失敗的運算式、原始程式檔名稱和判斷提示失敗的行號。
診斷資訊以寬字元列印。 因此,即使在運算式的 Unicode 字元,它會如預期般運作。
診斷訊息的目的地取決於呼叫常式應用程式類型。 主控台應用程式透過 stderr,一定會接收訊息。 在 Windows 架構應用程式, assert 呼叫 Windows 函式 MessageBox 建立訊息方塊具有 好按鈕一起顯示訊息。 當使用者按一下好時,程式會立即結束。
當應用程式使用執行階段程式庫的偵錯版本連接時, assert 會建立有三個按鈕的訊息方塊: 中止、 重試和 忽略。 如果使用者按一下 中止,程式會立即結束。 如果使用者按一下 重試,偵錯工具呼叫,如果 Just-In-Time (JIT) 偵錯已啟用,使用者可以偵錯程式。 如果使用者按一下 忽略, assert 繼續它的正常執行:建立具有好按鈕的訊息方塊。 請注意,當錯誤條件存在時按下 忽略 ,可能導致未定義的行為。
如需 CRT 偵錯的詳細資訊,請參閱CRT Debugging Techniques。
assert 常式可用在發行和偵錯 C 執行階段程式庫的版本。 其他兩個 ASSERT 巨集, _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::Assert