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