• 【C++】main函数的秘密


    偶然一天突发奇想,在main主函数内加上了一行:

    main()

    调用自身?!

    以前一直觉得main函数挺特殊,编译一下,没有报错!

    #include<cstdio>
    int main()
    {
    	printf("0");
    	main();
    	return 0;
    }

    于是我开始运行:

    猜猜发生了什么?无限循环输出0?

    本来我也这么认为,但是就在输出了满屏0没多久,程序停下来了(也有可能会提示你:XX已停止工作)。

    稍微想想,栈溢出了!不过从这里可以看出:main“基本”可以递归调用


    然后我又想:看看main到多少会栈溢出呢?

    So easy!

    定义一个全局变量,每次输出后++即可:

    #include<cstdio>
    int k=1;
    int main()
    {
    	printf("%d ",k);
    	k++;
    	main();
    	return 0;
    }

    43395!(此数据为回家测的)

    话说,我在学校测的时候记得是60000多啊,肿么回事,又测一遍,还是这样。


    没办法,问问“白老师”:

    实际上,在C语言中,main函数可被递归调用,而在C++标准中,main函数不可以被递归调用。

    那么main()在c++中是不能用的吗?

    “C++标不允许,并不意味着就不可以下main函数递归调用的C++程序,只要你的编译器支持就行了。


    但是还是没有解决栈溢出的问题,“白老师”也没有办法。

    我自己觉得:栈溢出的递归次数应该是没有明确规定(好像也不是“规定”,但我找不出更好的词了……)的。


    此博客仅为个人看法,有什么不对大家多多指正。

                                                                                                                                                                               By WZY

  • 相关阅读:
    HDU1548:A strange lift
    hdu1978_How many ways dfs+记忆化搜索
    HDU1518:Square(DFS)
    HDU ACM 1495 非常可乐(广搜BFS)
    HDU1372:Knight Moves(BFS)
    662_二叉树最大宽度
    590_N叉树的后序遍历
    一直在坚持
    动态链接库DLL的操作顺序
    最近木马的查杀方法/各类杀毒软件的使用
  • 原文地址:https://www.cnblogs.com/LinqiongTaoist/p/7203774.html
Copyright © 2020-2023  润新知