7

重複の可能性:
C++ の _tmain() と main() の違いは何ですか?

void main(...)、int main(..)、int _tmain() の違い。それらはすべて単一入口および単一出口システムです。しかし、これらの起動関数をどのような状況で使用するのでしょうか?

4

2 に答える 2

4

void main()無効です; C++ 標準ではmain、 を返す必要がありintます。一部のコンパイラでは、それを回避できます。

int main()2 つの標準形式の 1 つです。もう 1 つはint main(int argc, char *argv[])、コマンドライン引数を受け取るために使用できる です。実装は他の形式を許可するかもしれませんが、必須ではありませんが、そのような形式はすべて返さなければなりませんint

int _tmain()マイクロソフト固有のものです。

于 2012-10-15T09:18:55.413 に答える
2

異なる実装が異なるエントリ ポイント (またはエントリ ポイントの選択) をサポートする理由は、OS や環境が異なれば、プログラムを実行する方法や、引数情報をプログラムに渡す方法も異なるためです。

C++ の実装には、次の 2 種類があります。

「ホストされた」実装は、ある種の OS の存在を前提としています。ホストされた実装でmainは、適合プログラムで必要であり、 を返さなければなりませんint

「独立した」実装は、OS の存在を想定していません。独立した実装では、require を必要とするかどうかは実装次第ですmainが、標準では、mainが必要な場合は を返さなければならないと言われていintます。

実装がホストされた実装の機能を提供するのは一般的な方法ですが、 以外のエントリ ポイントを許可しmainます。これは、ホストされた実装の標準に準拠してますが、定義する準拠プログラムmainが受け入れられます。main事実上、実装は、代わりに実装定義の代替を含む場合、機能のない特定の非準拠プログラムを (拡張として) 許可します。技術的には、「エラー」を診断する必要があると思いますが、実際には、そのような拡張機能を誤って使用する人はいないため、おそらく診断を見たくないでしょう。

同様に、準拠する実装は、 を含むプログラムを受け入れることができvoid mainます。繰り返しになりますが、実装が準拠するには、プログラムが準拠していないことを診断する必要があります。

とにかく実装が受け入れる不適合プログラムの意味は、実装次第です。

_tmainMS拡張です。mainこれは、ナロー文字ビルドおよびwmainワイド文字ビルドでのエイリアスです。wmainも MS 拡張であり、狭い文字列ではなく幅の広い文字列として提供されるmainことを除いては似ています。argvしたがって、これは、プログラムがナロー文字の範囲外 (つまり、8 ビット コード ページ外) の文字を処理するかどうかに応じて、プログラムに引数を与える 2 つの異なる方法がある環境の例です。

于 2012-10-15T09:20:28.450 に答える