19

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

さて、私が理解しているように、C#とJavaはどちらも、エントリポイントの戻り型を次のようにすることができますvoid

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

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

Dプログラミング言語やValaのようなC++の後継となる可能性のある他の言語(少なくともこの10年でC ++が成功するとは思えません)も許可されますvoid main()。ご覧のとおり、C ++コミュニティでは、あまりにもあいまいで人気がなかったため、標準から削除されたとは思えません。

だから私の質問は、なぜC ++コミュニティが削除されたのvoid main()ですか?何が問題だったのですか?

4

4 に答える 4

15

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

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

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

于 2012-02-25T07:30:32.730 に答える
11

C ++はこれまで許可していませvoid main()んが、一部のコンパイラは拡張機能として、または診断しないという理由だけで許可する場合があります。

同様に、Cはvoid main()拡張として以外は許可していません。キーワードを導入した同じ1989年の標準は、 :と。voidの2つの標準定義を定義しました。mainint main(void)int main(int argc, char *argv[])

他の言語はそれを許可します。なぜなら、それらは他の言語だからです。

void main()ではなく、書くことができることに特別な利点はありませんint main()。明示的に値を返す必要はありません。の終わりから落ちることは(C ++では、C99で始まるCでは)とmain同等です。return 0;

于 2012-02-25T07:24:07.030 に答える
9

通常、プログラムの終了ステータスを知りたいと思います。それがあなたが持っている理由ですint main()-あなたはあなたの終了ステータスを返します。

于 2012-02-25T07:21:07.153 に答える
4

これはC++標準が正当なものとして指定しているものではないため、これは間違っていますmain。他の言語が何を指定するかは誰も気にしません。C ++プログラムの場合、関連するのはC ++標準のみであり、と書かれていますint

于 2012-02-25T07:21:27.370 に答える