共用方式為


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:: 判斷提示

請參閱

參考

錯誤處理 (CRT)

處理程序和環境控制

abort

raise

signal

_Assert 狀況,_asserte 的判斷提示巨集

_DEBUG