C++ でプログラムを終了するさまざまな方法

この記事では、C++ プログラムの実行中の任意の時点でプログラムを終了できるさまざまな方法について学びました。

コードの最終行が実行されると終了するために使用されるプログラム。これにより、割り当てられたリソースが解放されます。ただし、場合によっては、何らかの条件が満たされたときにプログラムを終了する必要が生じることがあります。他のすべてのプログラミング言語と同様に、呼び出し時に C++ でプログラムを終了または終了するために使用できる特定の機能があります。

C++ でプログラムを終了する方法はいくつかあります:-

  • return ステートメントの使用。
  • try と catch ブロックを使用する。
  • exit() 関数を使用する。
  • _Exit() 関数を使用する。
  • quick_exit() 関数を使用する。
  • abort() 関数を使用する。
  • terminate() 関数を使用する。

ここで、C++ でプログラムを終了または終了するさまざまな方法について説明します。

戻る

C++ では、プログラムは return で終了します。 main() でステートメントが検出されました プログラムの機能。以前は 0 を返していました main() の int 通常の終了を表す関数。

コンパイラが return に遭遇したとき main() 内のステートメント 関数を使用すると、すべての静的オブジェクトが破棄され、リソースが解放されます。これは、オブジェクトの初期化の逆の順序で発生します。

例を挙げましょう

#include <iostream>
using namespace std;
int main()
{
    cout << "Hi";
    return 0;
    cout << "Bye";
}

上記のコードの結果:-

Output:-
Hi

上記の出力では、return に遭遇するとプログラムが終了するため、Hi のみが出力されることがわかります。

トライ アンド キャッチ ブロック

return を使用する別の方法もあります try については知っています。 そしてキャッチ C++ でブロックします。コードブロックが何らかの例外をスローする可能性があると考えてみると. try に配置します ブロックし、例外が発生した場合は catch にトラップされます ブロック。これにより、C++ で例外が発生した場合にプログラムが終了または終了するのを防ぎます。

これを main() で使用すると 関数と return を配置します catch 内のステートメント

例を挙げましょう

#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
    cout<< "Shikhar" << endl;
    try{
        throw;
    }
    catch(...){
        return 0;
    }
    cout << "Dhawan";
}

上記のコードの結果:-

Output:-
Shikhar

上記の出力では、return ステートメントを catch 内に配置したため、Shikhar のみが出力されていることがわかります。 ブロックし、例外のために catch にトラップされます プログラムの終了につながるブロック。

exit()

exit() 関数は stdlib.h にあります ヘッダー ファイルと遭遇したときにプログラムを終了するために使用されます。関数内で常に終了コードを指定する必要があります。このコードは定数 EXIT_SUCCESS にすることができます (これは 0) と EXIT_FAILURE これらは同じヘッダー ファイルでも指定されています。

exit() の後のすべてのステートメントを無視します 関数に遭遇しました。また、前の方法で行われたのと同じクリーンアップも実行します。
exit() の一般的なプロトタイプは次のとおりです:-

void exit(int ExitCode);

例で見てみましょう

#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
    cout << "Good Bye";
    exit(0);
    cout << "Sayonara";
}

上記のコードの結果:-

Output:-
Good Bye

上記の出力では、コントロールが exit() に遭遇するとすぐに Good Bye のみを出力することがわかります。 関数の場合、残りのコードは無視され、プログラムは終了します。

_Exit()

この関数は、上記で定義された関数で発生していたリソースのクリーンアップを実行せずに、プログラムを正常に終了します。 atexit() も呼び出しません。 関数 (指定された関数を通常のプロセス終了時に呼び出されるように登録します。これは、exit(3) またはプログラムの main() からの戻りを介して行われます。そのように登録された関数は、登録の逆の順序で呼び出されます。引数は渡されません) ハンドラプログラムの終了中。

この関数で終了コードも指定する必要があります。
_Exit() の一般的なプロトタイプは次のとおりです:-

void _Exit(int exit_code); // Here the exit_code represent the exit
                           // status of the program which can be 
                           // 0 or non-zero.

たとえば、

#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
    cout << "Hello" << endl;
    _Exit(0);
    cout << "Hi";
}

上記のコードの結果:-

Output:-
Hello

上記の出力では、コントロールが _Exit(0) に遭遇したため、Hello のみが出力されていることがわかります。 、リソースをクリーンアップせずにプログラムを終了します。

quick_exit()

quick_exit() 関数は、_Exit() に関連するリソースの完全なクリーンアップを実行せずにプログラムを正常に終了します 関数。 at_quick_exit() の指定子を呼び出します (これは、プログラムのクイック終了時に呼び出される関数を登録します。つまり、 quick_exit() を介して終了します .at_quick_exit() で登録された関数 quick_exit() 時に呼び出される関数 関数が呼び出されます) at_exit() を呼び出す代わりに 終了中。

at_quick_exit() を呼び出した後 関数、それは _Exit() を呼び出します プログラムを終了する関数。

quick_exit() の一般的なプロトタイプは次のとおりです:-

void quick_exit(int exit_code);

たとえば、

#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
    cout << "Hello Hi" << endl;
    quick_exit(0);
    cout << "Bye Bye";
}

上記のコードの結果:-

Output:-
Hello Hi

上記の出力では、コントロールが quick_exit(0) に遭遇するとすぐに Hello Hi のみが出力されることがわかります。 at_quick_exit() の指定子を呼び出す関数 次に _Exit() を呼び出します プログラムを終了する関数。

中止()

この関数は cstdlib.h で定義されています ヘッダー ファイルを削除し、プログラムの異常終了を引き起こすため、極端な場合にのみ使用する必要があります。リソースのクリーンアップは行われず、終了に関するシグナルのみが OS に送信されます。

at_exit() を呼び出しません。 または at_quick_exit() 終了時に機能します。
上記のステートメントは、以下のサンプル コードから明らかです。

#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
    cout << "Hi" << endl;
    abort();
    cout << "Hello";
}

上記のコードの結果:-

Output:-
Hi

上記の出力では、コントロールが abort() に遭遇するとすぐに Hi のみを出力することがわかります。 プログラムの異常終了が発生します。

terminate()

この関数は exception で定義されています ヘッダファイル。 C++ は、実行時に例外がスローされてキャッチされないなどの理由でプログラムをさらに実行できない場合に、この関数を直接呼び出します。

直接呼び出すと、terminate_handler() を呼び出します 関数を実行し、abort() を実行します

たとえば、

#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
    cout << "Rahul" << endl;
    terminate();
    cout << "Amitabh";
}

上記のコードの結果:-

Output:-
Rahul
terminate called without an active exception

上記の出力では、コントロールが terminate() に遭遇するとすぐに、「アクティブな例外なしで呼び出された終了」というメッセージとともに Hi のみを出力することがわかります。 前回と同様に、プログラムの異常終了が発生します。