为什么下面的代码没有终止?

时间:2016-12-31 06:17:54

标签: c

为什么下面的代码根本没有终止?

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

5 个答案:

答案 0 :(得分:8)

main()函数进行递归调用(代码中的第4行),这会导致无限递归。

答案 1 :(得分:1)

您的代码永远不会到达return 0;语句...因为main函数会在此之前调用自己。第二次代码运行时,它会再次调用自身,然后再次运行main时,它会在到达return语句之前调用自身... 这将永远持续下去。

答案 2 :(得分:0)

上面的代码给出了编译错误。正确的代码可能是 -

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

它进入无限循环,因为'main'递归调用自身并且没有终止条件。

答案 3 :(得分:0)

代码将生成编译错误"调用main"的额外参数 如果在main中没有任何参数运行那么它将是对main函数的递归调用,这就是为什么它不是终止的。

答案 4 :(得分:0)

好的,这里有两件事:

  1. 标准说只有两种方法可以写mainint main(void) {}int main(int argc, char* argv[]) {}。你没有遵循,这使得

  2. 您的main函数接受未指定的个参数。因此,期望您的main函数不接受任何arg。

  3. 作为第二点的结果,即使这样也会编译并运行:

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

    编写int main(void)并查看编译器对递归调用的看法。 HTH。