C++のmain()関数:returnステートメントとexit()の違いを解説
C++におけるプログラム終了方法の基本
C++では、main()関数からプログラムを終了させる方法として、「returnステートメント」と「exit()関数」の2つが挙げられます。一見どちらもプログラムを終了するために使われますが、その動作には重要な違いがあります。本記事では、それぞれの特徴と具体的なコード例を通じて、両者の違いをわかりやすく解説します。
returnステートメントとは
returnステートメントは、関数の実行を終了し、制御を呼び出し元の関数に返すための構文です。main()関数内で使用した場合、ローカルオブジェクトに対してデストラクタが正しく呼び出されるという重要な特徴があります。
「int main()」の場合、returnステートメントは整数値を返します。
returnステートメントの構文
return 式;
式 − 呼び出し元に返す値または式を指定します。
returnステートメントのコード例
#include<iostream>
using namespace std;
class Method {
public:
Method() {
cout << "Constructor\n";
}
~Method() {
cout << "Destructor";
}
};
int main() {
Method m;
return(0);
}出力結果
Constructor Destructor
この例では、オブジェクトmの生成時にコンストラクタが出力され、main()関数がreturnで終了するときにデストラクタも呼び出されていることが確認できます。
exit()関数とは
exit()関数は、それ以降の処理を実行せずに、呼び出し元の関数を即座に終了させるための関数です。exit()が呼び出されるとプロセス全体が終了します。
大きな特徴として、exit()はコンストラクタのみを呼び出し、デストラクタは呼び出さないという点が挙げられます。また、C言語では「stdlib.h」ヘッダファイルで宣言されており、戻り値はありません。
exit()の構文
void exit(int status_value);
status_value − 親プロセスに返す終了ステータスの値を指定します。
exit()のコード例
#include<iostream>
using namespace std;
class Method {
public:
Method() {
cout << "Constructor\n";
}
~Method() {
cout << "Destructor";
}
};
int main() {
Method m;
exit(0);
}出力結果
Constructor
この例では、コンストラクタの出力のみが表示され、デストラクタは呼び出されていません。これは、exit(0)によってプロセスが即座に終了したためです。
returnとexit()の違いまとめ
| 項目 | return | exit() |
|---|---|---|
| デストラクタの呼び出し | 呼び出される | 呼び出されない |
| 制御の移動 | 呼び出し元へ戻る | プロセスが即終了 |
| 宣言ヘッダ | 不要 | cstdlib(C言語ではstdlib.h) |
| 戻り値 | int main()では整数値を返す | なし |
リソースの解放や後処理が必要な場合はreturnを使用し、エラー発生時などに強制的にプログラムを中断させたい場合はexit()を使うなど、状況に応じて適切に使い分けることが大切です。
-
C/C++におけるmain()関数の戻り値とは?正しい返し方を解説
main()関数の戻り値の役割main()関数の戻り値は、プログラムがどのように終了したかを示すために使用されます。プログラムが正常に実行された場合は「0」を返します。一方、異常終了(エラー、無効な入力、セグメンテーションフォルトなど)の場合は、通常「0以外」の値を返して終了します。ただし、0以外のコードが具体的にどう解釈されるかについては、標準的な規定は存在しません。独自のステータスコードを定義することも可能開発者は独自のステータスコードを定義し、プログラム内で発生したさまざまな種類の失敗を表現するために利用できます。これにより、呼び出し元のシェルスクリプトや他のプログラムが終了コードを参照
-
PHPのreturnステートメント(return文)の使い方を徹底解説
はじめにPHPにおけるreturn文の目的は、プログラムの実行制御を呼び出し元の環境へ返すことです。returnが実行されると、関数やモジュールを呼び出していた式の次から処理が再開されます。return文が関数の内部で実行されると、その時点で現在の関数の実行は終了し、制御は呼び出し元の環境へ引き渡されます。また、return文には式をオプションとして指定できます。この場合、制御とともにその式の評価結果(値)も呼び出し元へ返されます。includeなどで読み込まれたスクリプト内でreturn文に到達すると、そのスクリプトの実行は直ちに終了し、制御はインクルード元のスクリプトへ戻ります。一方、トッ