C/C++ はサブルーチン関数、つまりメインではないプログラムの終了をサポートしていますか? これまでのところ、 exit と abort を使用すると、ユーザーが現在の関数またはプロセスを終了できることがわかりました。メイン関数にいない場合、プログラム全体を終了する方法はありますか?
5 に答える
他の機能に参加していない場合は、呼び出すことmain()
もできます。そうしないと、プロセス全体が終了します。exit()
abort()
whereexit()
は必要なクリーンアップを行います whereabort()
はそれを行いません。
あなたはC++を話しているので、考えてみてくださいstd::terminate
u 今、「C/C++ はサブルーチン関数、つまりメインではないプログラムの終了をサポートしていますか?」
デフォルトでは をstd::terminate
呼び出しますがabort
、これは次の方法でハンドラーをインストールすることで構成できますstd::set_terminate
void 出口 (int ステータス)
上記の方法 プロセスを正常に終了し、プログラムを終了するための定期的なクリーンアップを実行します。
通常のプログラムの終了では、次のことを (同じ順序で) 実行します。
スレッド ストレージ期間を持つ現在のスレッドに関連付けられているオブジェクトは破棄されます (C++11 のみ)。
静的ストレージ期間を持つオブジェクトは破棄され (C++)、atexit に登録された関数が呼び出されます。
すべての C ストリーム ( の関数で開く) が閉じられ (バッファリングされている場合はフラッシュされ)、tmpfile で作成されたすべてのファイルが削除されます。
その後、Control はホスト環境に戻されます。
関数が同じプロセスの一部であるため、呼び出しプロセスを終了すると、その中で exit() を使用するとプログラムが終了します。
メイン関数からその関数を呼び出した場合にのみ可能です。そして、プログラムを終了したい関数から、プログラムを終了するための値 (-1 など) を返します。
例:
void main()
{
//Call to a function
int i = functionFromMain();
if(i == -1)
{
//Terminate Program
}
}