1. ホーム
  2. c++

[解決済み] main()からはEXIT_SUCCESSと0のどちらを返すべきですか?

2022-04-28 20:47:27

質問

C++のプログラムのメインルーチンは、以下のように返すべきでしょうか? 0 または EXIT_SUCCESS ?

#include <cstdlib>
int main(){return EXIT_SUCCESS;}

または

int main(){return 0;}

全く同じものなのでしょうか?すべき EXIT_SUCCESS とのみ使用します。 exit() ?

と思ったら EXIT_SUCCESS は、他のソフトウェアが0を失敗とみなしたがる可能性があるので、より良い選択肢だと思いますが、もしあなたが 0 のように、コンパイラが別の値に変更することが可能です。

解決方法は?

EXIT_FAILURE のreturnステートメントのどちらかです。 main の引数として、または exit() CやC++のプログラムで失敗を示す唯一のポータブルな方法です。 exit(1) は、例えばVMS上では実際に正常終了を示すことができます。

もし、あなたが EXIT_FAILURE を使用したほうがよいでしょう。 EXIT_SUCCESS 成功したときは、対称性を保つためです。

一方、プログラムが決して失敗を知らせない場合は、次のどちらかを使用することができます。 0 または EXIT_SUCCESS . どちらも成功したことを示すものとして、規格で保証されています。 (かろうじて EXIT_SUCCESS は0以外の値を持ち得ますが、私が聞いたことのあるすべての実装では0に等しいです)。

使用方法 0 が不要になるという小さな利点があります。 #include <stdlib.h> はC言語、または #include <cstdlib> をC++で使用する場合(もしあなたが return ステートメントを呼び出すのではなく exit() しかし、それなりの規模のプログラムでは、いずれにせよ stdlib を直接または間接的にインクルードすることになります。

その点、1999年規格のCから、そしてC++のすべてのバージョンにおいて main() は暗黙のうちに return 0; を使用する必要はないかもしれません。 0 または EXIT_SUCCESS を明示的に指定します。 (しかし、少なくともCでは、私は明示的な return 0; の方が良いスタイルだと思います)。

(OpenVMSについて質問された方がいらっしゃいました。私は長い間使っていませんが、確かステータスの値が奇数の場合は成功、偶数の場合は失敗を示すのが一般的です。 C言語の実装では 01 というように return 0; は正常終了を意味する。他の値は変更されずに渡されるため return 1; も正常に終了したことを示す。 EXIT_FAILURE はゼロでない偶数値を持つことになる)。