Bjarne Stroustrup でさえvoid main
、C++ で を書いているので、これは確かに一般的な反ミームであり、古いものであり、Java やvoid main
. もちろん、Bjarne はvoid main
、C や C++ の一部ではないものも書いています。ただし、この後者のステートメント (彼の FAQ 内) については、少なくとも C99 の時点では、Bjarne が間違っているように見えます。なぜなら、C99 標準の N869 ドラフトでは、§5.1.2.2.3/1 で次のように述べられているからです。
「関数の戻り値の型が とmain
互換性のある型である場合、関数int
への最初の呼び出しからの戻りは、関数によって返された値を引数として関数main
を呼び出すことと同じです。関数を終了するに到達すると、値 0 が返されます。戻り値の型が と互換性がない場合、ホスト環境に返される終了ステータスは規定されていません。exit
main
}
main
int
以前、その §5.1.2.2.1/1 で、 の署名について述べていますmain
。
「または他の実装定義の方法で。」
int
たとえば、「と互換性がない」戻り値の型はvoid
.
したがって、これは完全な答えではありませんが (これに関する歴史的な情報源がネット上で入手できるとは思えません)、少なくとも質問の仮定を修正する方向に進んでいます。void main
C および C++ で完全に忌まわしいというわけではありません。しかし、C++ では無効です。これは、ホストされた C++ 実装ではサポートされていない C のものです。