void main()の何が間違っていましたか?
-
12-11-2019 - |
質問
C ++のC ++のvoid
にエントリポイントの戻りタイプを設定したのはなぜですか?なぜ悪い練習と考えられているのですか?
今、私はC#とJavaを理解しているので、エントリポイントの戻り型がvoid
i.e になることを可能にします。
static void main(String[] args) /* Java */
static void Main(string[] args) /* C# */
.
とC#およびJavaプログラマーはそれが悪い練習を考慮していない、彼らはそれをしばしばそれを使用します。
その他の言語(のみがこの10年間、少なくともC ++では、少なくともC ++に成功することに成功します)Dプログラミング言語やValaのようにC ++の後継者もvoid main()
を許可します。あなたが見ることができるように、私はC ++コミュニティが標準からそれを削除したのを疑います。
だから私の質問は、C ++コミュニティがvoid main()
を削除したのですか?何が悪かったのですか?
解決
C ++規格委員会は、既存のコードの大きな既存のコードの大規模な既存のコードを要求することを選択して、特定の終了コードをランタイムシステムに返すと予想される可能性が高い。代わりに既存のコードがint main()
を使用するように変更することを期待するのは不合理です。
Javaなどの言語は、設計されたときに、互換性があることが必要な既存のコードの任意のボディを持たなかった。したがって、設計者はreturn
を選択し、ゼロ以外の終了コードのexit()
を使用する必要があります。
そのため、C ++規格のint main()
を選択することで「間違った」となることは、void main()
とSystem.exit()
からの終了コード値を使用すると予想される既存のコードを破ることです。
他のヒント
c ++は、を使用許可されていません。
同様に、cは、拡張子以外のvoid main()
を使用することはありません。void main()
キーワードを導入したのと同じ1989規格は、void
:main
とint main(void)
の2つの標準定義を定義しました。
他の言語は、他の言語であるために許可されています。
int main(int argc, char *argv[])
ではなく、void main()
を書くことができることは特にありません。明示的に値を返す必要さえありません。int main()
の終わりからの降下は、main
(C ++、およびC99から始めてC)と同じです。
一般的にプログラムの終了ステータスを知りたいです。それがあなたがint main()
を持っている理由です - あなたがあなたの出口ステータスを返します。
これはC ++規格が法的なmain
として指定されているものではないため、間違っています。誰も他の言語が指定するものを気にしないでください。C ++プログラムの場合、C ++規格のみが関連しており、int
と表示されます。