2016-12-31 30 views
-2

次のコードはなぜ完全に終了しないのですか?次のコードが終了しないのはなぜですか?

int main() 
{ 
    printf("Hello world\n"); 
    main("hello",32); 
    return 0; 
} 
+4

コードは正しくコンパイルされますか? –

+0

はいそれはコンパイルされました。 –

+1

'printf( "Hello World \")'というステートメントを考えてみましょう。最後の二重引用符はありません。それに続く文字を '\'使用すると、通常の意味では使用されません(エスケープシーケンスとも呼ばれます)。さらに、 'main'に引数を渡すべきではありません –

答えて

8

無限の再帰につながる(コード内の4行目)main()関数の再帰呼び出しがあります。

+0

しかし、1つの呼び出しだけがあります。 –

+7

main()はそれ自身を呼び出しており、無制限の再帰です。何が起こっているのかを理解するために再帰を勉強したいと思うかもしれません。 – codeforester

+0

@Anurag再帰関数呼び出しについて読んでください。'main'が最初に呼び出されると、他の 'main'などを呼び出すようになります。 –

0

上記のコードはコンパイルエラーです。正しいコードは以下のようになり -

int main() 
{ 
    printf("Hello world"); 
    main(); 
    return 0; 
} 

「メイン」は自分自身を再帰的に呼び出しているし、何の終了条件が存在しないので、それが無限ループになるだろう。

0

メインでパラメータを指定せずに実行すると、 "mainの呼び出しで余分なパラメータ"というコードが生成されますが、それはmain関数の再帰的呼び出しであり、その理由は終了していません。

1

main関数がその前に自身を呼び出すため、コードはreturn 0;ステートメントに到達しません。 2回目にコードが実行されると、再度呼び出され、mainが再び実行されると、returnステートメントに達する前に自身を呼び出します。 これは永遠に続きます。

0

OK、ここでは2つのものがあります。 int main(void) {}int main(int argc, char* argv[]) {}

  1. 標準はmainを書くための唯一の2つの方法がありますと言います。あなたはどちらにも従っていないので、

  2. main関数はを指定できません。 argsの数です。したがって、あなたはではありませんあなたのmain関数はargを受け入れないと予想します。第二の点の結果

、でもこれはコンパイルして実行します:

int main() 
{ 
    printf("Hello world\n"); 
    main("hellow",32, "cow", 3.14); 
    return 0; 
} 

int main(void)を書くと、コンパイラは、再帰呼び出しについて言っているものを参照してください。 HTH。

関連する問題