abort
現在のプロセスを中止し、エラー コードを返します。
注意
テスト シナリオまたはデバッグ シナリオの場合を除き、この方法を使用して Windows ストア アプリをシャットダウンしないでください。プログラムや UI によって Windows ストア アプリを終了する方法は、「Windows 8 アプリの認定の要件」により禁止されています。詳細については、「アプリケーションのライフサイクル (Windows ストア アプリ)」を参照してください。
void abort( void );
戻り値
abort は、呼び出し元のプロセスに制御を返しません。 既定では、中止シグナル ハンドラーが確認され、それが設定されている場合は SIGABRT が発生します。 その後 abort は、現在のプロセスを終了し、親プロセスに終了コードを返します。
解説
Microsoft 固有の仕様 →
既定では、デバッグ ランタイム ライブラリを使用してアプリをビルドしている場合、abort ルーチンによってエラー メッセージが表示された後、SIGABRT が発生します。 コンソール モードで動作しているコンソール アプリの場合は、STDERR にメッセージが送信されます。 ウィンドウ モードで動作している Windows デスクトップ アプリとコンソール アプリでは、メッセージ ボックスにメッセージが表示されます。 メッセージを抑制するには、_set_abort_behavior を使用して _WRITE_ABORT_MSG フラグをクリアします。 表示されるメッセージは、使用しているランタイム環境のバージョンによって異なります。 Visual C++ の最新バージョンを使用してビルドされたアプリケーションでは、次のようなメッセージが表示されます。
R6010
- abort() has been called
C ランタイム ライブラリの以前のバージョンでは、次のメッセージが表示されました。
"This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information."
プログラムをデバッグ モードでコンパイルしている場合、メッセージ ボックスに [中止]、[再試行]、または [無視] のオプションが表示されます。 ユーザーが [中止] をクリックすると、プログラムが即座に終了し、終了コード "3" が返されます。 ユーザーが [再試行] をクリックすると、just-in-time デバッグが有効な場合はデバッガーが起動してデバッグが開始します。 ユーザーが [無視] をクリックすると、abort によって通常の処理が続けられます。
リテール ビルドとデバッグ ビルドのどちらの場合も、abort は次に、中止シグナル ハンドラーが設定されているかどうかを確認します。 既定以外のシグナル ハンドラーが設定されている場合、abort は raise(SIGABRT) を呼び出します。 SIGABRT シグナルに中止シグナル ハンドラー関数を関連付けるには、signal 関数を使用します。 ハンドラー関数では、カスタム動作 (リソースのクリーンアップや情報のログ記録など) を実行し、独自のエラー コードを発行してアプリを修了できます。 カスタムのシグナル ハンドラーが定義されていない場合、abort で SIGABRT 通知が発生しません。
既定では、デスクトップ アプリやコンソール アプリの非デバッグ ビルドで、abort は次に、Windows のエラー レポート機構 ( ワトソン博士) を起動してエラーを Microsoft に報告します。 この動作は、_set_abort_behavior を呼び出し、_CALL_REPORTFAULT フラグを設定するかマスクして、有効または無効にすることができます。 フラグが設定されていると、Windows でメッセージ ボックスが開き、「問題が発生したため、プログラムが正しく動作しなくなりました」などのテキストが表示されます。ユーザーは [デバッグ] をクリックしてデバッガーを開始するか、[プログラムの終了] をクリックすることでオペレーティング システムで定義されているエラー コードを発行してアプリを終了できます。
Windows のエラー レポート ハンドラーが起動しない場合、abort は _exit を呼び出し、終了コード "3" を発行してプロセスを終了した後、親プロセスまたはオペレーティング システムに制御を戻します。 _exit は、ストリーム バッファーをフラッシュせず、atexit/_onexit 処理を行いません。
CRT デバッグの詳細については、「CRT のデバッグ技術」を参照してください。
End Microsoft 固有
必要条件
ルーチン |
必須ヘッダー |
---|---|
abort |
<process.h> または <stdlib.h> |
使用例
次のプログラムはファイルを開こうとしますが、試みに失敗すると中止されます。
// crt_abort.c
// compile with: /TC
// This program demonstrates the use of
// the abort function by attempting to open a file
// and aborts if the attempt fails.
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
FILE *stream = NULL;
errno_t err = 0;
err = fopen_s(&stream, "NOSUCHF.ILE", "r" );
if ((err != 0) || (stream == NULL))
{
perror( "File could not be opened" );
abort();
}
else
{
fclose( stream );
}
}
同等の .NET Framework 関数
使用できません。標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。