次の方法で共有


assert (CRT)

式を評価し、結果が 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 以外) の場合は、何も実行しません。 診断メッセージには、エラーになった式、アサーションが失敗したソース ファイルの名前と行番号が表示されます。

診断メッセージはワイド文字で印刷されます。 したがって、式に 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
}
      

同等の .NET Framework 関数

System::Diagnostics::Debug::Assert

参照

参照

エラー処理 (CRT)

プロセス制御と環境制御

abort

raise

signal

_ASSERT マクロ、_ASSERTE マクロ

_DEBUG