Share via


assert (CRT)

更新 : 2007 年 11 月

式を評価し、結果が false の場合は診断メッセージを表示してプログラムを停止します。

void assert( 
   int expression 
);

パラメータ

  • expression
    0 または 0 以外になる式 (ポインタ値を含む)。

解説

通常 assert マクロは、プログラム開発時に論理エラーを識別するために使用し、引数 expression を実装します。プログラムの処理が不正な場合に限り結果は false になります。ソース ファイルを変更しなくても、デバッグを完了した後に、NDEBUG 識別子を定義してアサーションのチェックを無効にできます。NDEBUG は、/D コマンド ライン オプション付き、または #define ディレクティブ付きで定義できます。#define を使用して NDEBUG を定義する場合は、このディレクティブを Assert.h をインクルードする前に記述する必要があります。

expression が false (0) になると、assert は診断メッセージを表示し、abort を呼び出してプログラムの実行を停止します。expression が true (0 以外) の場合は、何も実行しません。診断メッセージには、エラーになった式、アサーションが失敗したソース ファイルの名前と行番号が表示されます。

Visual C++ 2005 では、診断メッセージはワイド文字で出力されます。したがって、式に Unicode 文字が含まれる場合も正常に動作します。

診断メッセージの出力先は、このルーチンを呼び出したアプリケーション タイプによって決まります。コンソール アプリケーションは、常に stderr を通してメッセージを受信します。Windows ベースのアプリケーションでは、assert は Windows MessageBox 関数を呼び出してメッセージ ボックスを作成し、メッセージと [OK] ボタンを表示します。[OK] をクリックすると、プログラムはすぐに処理を中止します。

ランタイム ライブラリのデバッグ バージョンを使用してアプリケーションをリンクした場合、assert が作成するメッセージ ボックスには [失敗]、[再試行]、および [無視] の 3 つのボタンが表示されます。[失敗] をクリックすると、プログラムはすぐに処理を中止します。[再試行] をクリックすると、Just-In-Time (JIT) デバッグが有効な場合は、デバッガが呼び出されるため、ユーザーはプログラムのデバッグを行うことができます。[無視] をクリックすると、assert は [OK] を表示するメッセージ ボックスを作成して通常の処理の実行を継続します。エラーのある場合に [無視] をクリックすると、未定義の動作が実行される可能性があることに注意してください。

CRT デバッグの詳細については、「CRT のデバッグ技術」を参照してください。

assert ルーチンは、C ランタイム ライブラリのリリース バージョンとデバッグ バージョンの両方で使用できます。このほか、_ASSERT_ASSERTE の 2 つのマクロも使用できますが、これらのマクロは _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
}

Analyzing string 'abc'
Analyzing string '(null)'
Assertion failed: string != NULL, file crt_assert.c, line 24

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

.NET Framework の相当するアイテム

System::Diagnostics::Debug::Assert

参照

参照

エラー処理 (CRT)

プロセス制御と環境制御

abort

raise

signal

_ASSERT マクロ、_ASSERTE マクロ

_DEBUG