3

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

違法行為であるはずのmain関数を呼び出して、CodeBlockIDEを使用して小さなテストを行うことにしました。

元:

#include <iostream>
using namespace std;

int main()
{
  cout<<"hello"<<endl;
  main();
  return 0;
}

不思議なことに、コードブロックでこの混乱をコンパイルすることができました。誰かが理由を知っていますか?

出力:こんにちは

4

3 に答える 3

8

質問自体で述べたようmain()に、コードから明示的に呼び出すことは言語仕様によって禁止されています。ランタイムのみがそれを呼び出すことができます。

GCCを使用してコードをコンパイルする(コメントを読む)と、この-pedanticオプションはエラーまたは警告の形で適切な診断を提供します。だからこれを試してみてください:

g++ program.cpp -pedantic
于 2012-08-11T18:17:16.237 に答える
1
cout<<"hello"<<endl;
**main();**
return 0;

2行目のmain()は、main()関数がそれ自体を何度も呼び出す無限再帰ループを引き起こします。これにより、コードの戻り値にパスが発生しなくなります。

すべてのパスが値を返すわけではないため、Cコンパイラはこれをコンパイルしません。Cを忘れてください。コードは判読できますが、すべてのパスが値を返さないことが検出されると、C#コンパイラーでさえ停止します。

于 2012-08-11T18:22:18.263 に答える
0

main関数の下で任意の関数を呼び出すことができます。mainは、実行時にcomplierによってトリガーされる関数でもあります。はい、それは違法行為ですが、mainの下でmain関数を呼び出すことができます。mainの下でmain関数を呼び出すと、劣性になり、無限に実行されます。VS2008では、main関数を呼び出すように警告が表示されますが、プログラムは問題なく実行されます。

于 2012-08-11T18:12:57.007 に答える