assert (CRT)
結果が falseの、診断メッセージを出力し、プログラムの実行を中止すると、式を評価します。
void assert(
int expression
);
パラメーター
- expression
0 以外のまたは 0 に評価される式 (ポインターなど)。
解説
false に評価するに expression 引数の実装によって assert マクロは、通常、プログラムの開発中に論理エラーを識別するためにプログラムが正しく動作している場合にのみ使用されます。 デバッグが完了したら、アサーション チェックはソース ファイルを変更せずに識別 NDEBUGを定義してオフにできます。 NDEBUG は /D のコマンド ライン オプションまたは #define のディレクティブで定義できます。 NDEBUG が #defineとして定義した場合、ディレクティブは ASSERT.H を含む前に記述する必要があります。
assert は expression が false (0) に評価し、プログラムの実行を終了する場合に 中止 を呼び出すと診断メッセージを出力します。 アクションは expression が true は実行されません (0 以外のな)。 診断メッセージをソース ファイルに失敗した式、アサーションが失敗した名前と行番号が含まれます。
診断メッセージはワイド文字に出力されます。 したがって、式に Unicode 文字があっても正常に動作します。
診断メッセージのターゲットがルーチンを呼び出す種類のアプリケーションによって異なります。 コンソール アプリケーションは、常に stderr を使用してメッセージを受け取ります。 Windows ベースのアプリケーションで、assert は [OK] ボタンとともにメッセージを表示するメッセージ ボックスを作成するときは、Windows の MessageBox 関数を呼び出します。 ユーザーが [OK] をクリックすると、プログラムはすぐに中止されます。
アプリケーションがランタイム ライブラリのデバッグ バージョンとリンクすると、assert は 3 個のボタンによってメッセージ ボックスを作成する: [中止]、[再試行] と [無視]。 ユーザーが [中止] をクリックすると、プログラムはすぐに中止されます。 ユーザーが [再試行] をクリックすると、Just-In-Time (JIT) デバッグが有効になっている場合、デバッガーが呼び出され、ユーザーはプログラムをデバッグできます。 ユーザーが [無視] をクリックすると、assert は、通常の実行である、[OK] のボタンのあるメッセージ ボックスの作成を続けます。 エラー条件が未定義の動作が発生する可能性がある場合 [無視] をクリックしますことに注意してください。
CRT のデバッグに関する詳細については、「CRT のデバッグ技術」を参照してください。
assert ルーチンは、C ランタイム ライブラリのリリース バージョンとデバッグ バージョンの両方で使用できます。 2 つが他のアサーションのマクロは、_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