7

重複の可能性:
メイン関数はC ++でそれ自体を呼び出すことができますか?

この問題は非常に興味深いものでしたが、少し幻想的でした。質問6.42C++ディーテルによるプログラミング方法「システムでmainを再帰的に呼び出すことができますか?関数mainを含むプログラムを作成します。静的ローカル変数countを含め、1に初期化します。mainが呼び出されるたびにcountの値をポストインクリメントして出力します。 。プログラムをコンパイルします。どうなりますか?

私は以下のようにプログラムを書きましたが、代わりに、それを実行し続けるかのように10回後に再帰を停止させ、41000前後の値で停止します。

私の質問:c ++で再帰的にmain関数を呼び出すことはどのように合法ですか、このプログラムを実行してオーバーフローやメモリ障害などをスタックする必要がありますか?説明してください。

#include <iostream>
using namespace std;
int main()
{
       static int count = 0;
       count++;
       if(count <= 10) {
                cout << count << endl;
                return main(); //call main
                }//end if

       system("pause");
       return 0;//successful completion
}//end main

ありがとうございました

4

1 に答える 1

20

main()C++で関数を再帰的に呼び出すことはどのように合法ですか

それは合法ではありません。C ++言語標準では、「関数mainはプログラム内で使用してはならない」と規定されています(C++11§3.6.1/3)。関数の呼び出しは、「使用」の一形態です。

呼び出すプログラムはすべてmain()未定義の動作を示します(技術的には、違反しているルールは診断可能なセマンティックルールであるため、このようなプログラムは形式が正しくありませんが、ほとんどのコンパイラがプログラムを拒否した場合は驚きます)。これは、プログラムを開始するランタイムインフラストラクチャが関数を呼び出すことを妨げるものではないことに注意してくださいmain()

于 2012-07-05T17:35:36.893 に答える