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