关闭

【C++】main函数的秘密

标签: 函数c++
261人阅读 评论(0) 收藏 举报
分类:

偶然一天突发奇想,在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

3
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:23628次
    • 积分:891
    • 等级:
    • 排名:千里之外
    • 原创:65篇
    • 转载:3篇
    • 译文:0篇
    • 评论:3条
    博客专栏
    Judge

      

    最新评论