2011-09-27 11 views
3

Cは関数のオーバーロードをサポートしていません。どのようにしてメインの3つのプロトタイプを得ることができますか? 3つのプロトタイプを持つ歴史的な理由は何ですか?なぜCのメインの宣言が複数あるのですか?

+0

あなたの質問に対する答えは、ここにあります:http://stackoverflow.com/questions/5296163/why-is-the-type-of-the-main-function-in-c-and-c-left -to-the-the-user-to-define/5296593#5296593 – Lundin

答えて

9

mainのプロトタイプは、標準準拠のC実装では、int main(void)int main(int, char *[])を認識する必要があります。プログラムごとに1つしかないので、これはオーバーロードではありません。 1つのプログラムにvoid foo(int, double)、別のプログラムにchar *foo(FILE *)があると、どちらも過負荷になりません。

2つのプロトタイプの理由は便利です。コマンドライン引数が必要なアプリケーションもあれば、それを気にしないアプリケーションもあります。 およびint main(int, char *[], char *[])のような他のプロトタイプはすべて、コンパイラ/プラットフォームに依存する拡張です。

+0

'main'の2つの_canonical_形式のみがあり、2つ目のテキストには"または同等の "テキストが付いています(したがって' char ** 'は大丈夫です)。さらに、標準では他のものも可能にしています。 – paxdiablo

+0

@paxdiablo:標準の他のルールですでに処理されているため、同等のフォームを気にしないことにしました。他の発言のおかげで、答えに「必須」を追加しました。 –

+0

これは、ホストされているシステムでどのように動作するかだけを回答します。完全な回答については、このリンクをチェックしてください:http://stackoverflow.com/questions/5296163/why-is-the-type-of-the-main-function-in-c-and-c-left-to-the-ユーザー定義/ 5296593#5296593 – Lundin