なぜ void main() はメイン関数の有効なシグネチャとして標準化されなかったのでしょうか? 質問する

なぜ void main() はメイン関数の有効なシグネチャとして標準化されなかったのでしょうか? 質問する

C++ でエントリ ポイントの戻り値の型を に設定することがvoid常に推奨されず、後に標準によって削除され、最新のコンパイラによって禁止されたのはなぜですか? なぜそれが悪い習慣だと考えられているのですか?

さて、私が理解している限り、C#とJavaはどちらもエントリポイントの戻り値の型を許可していますvoid

static void main(String[] args) /* Java */
static void Main(string[] args) /* C# */

C# や Java のプログラマーはそれを悪い習慣とは考えておらず、実際に頻繁に使用しています。

その他の言語(意図されましたおそらく、C++ が少なくともこの 10 年間で成功することはないでしょう)。C++ の後継となる可能性のある D プログラミング言語や Vala も を許可していますvoid main()。したがって、C++ コミュニティが を標準から削除したのは、あまりにわかりにくい、または不人気だったからではないと思います。

そこで私の質問は、なぜ C++ コミュニティは を削除したのかvoid main()、何が問題だったのかということです。

ベストアンサー1

C++ 標準委員会が を必須としたのint main()は、既存のコードの大部分が、ステートメントを使用してreturn特定の終了コードをランタイム システムに返すことを想定していたためと思われます。既存のコードすべてが を使用するように変更されることを期待するのは不合理であるためexit()、 がint main()標準の要件となりました。

Java などの言語は、設計された時点では、互換性を維持する必要のある既存のコードがありませんでした。そのため、設計者は、ゼロ以外の終了コードに対してvoid main()の使用を選択し、要求することができました。System.exit()

したがって、C++ 標準を選択した場合に「間違っている」のは、と からの終了コード値をvoid main()使用することが想定されている既存のコードが壊れてしまうことです。returnmain()

おすすめ記事