共用方式為


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

請參閱

參考

錯誤處理 (CRT)

流程控制和環境控制

abort

raise

signal

_ASSERT、_ASSERTE 巨集

_DEBUG