【C++】main函数的秘密

原创 2016年08月30日 10:08:35

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

版权声明:本文为博主原创文章,不管你喜不喜欢都请转载~( ̄▽ ̄~)

C++函数重载(6) - main函数重载

参考下面程序的结果. #include using namespace std; int main(int a) { cout
  • shltsh
  • shltsh
  • 2015年05月24日 01:11
  • 391

关于c/c++中main()函数写法的一点新发现

以前编程的时候从未注意到这个小细节,今天用Codeblocks运行时出现错误,好奇查了一下,才发现一直以来不曾注意的一个小知识点。代码如下:  #include using namespace s...
  • onlymytravel
  • onlymytravel
  • 2017年03月06日 17:24
  • 255

C++ main函数详解

main函数的参数   我们经常用的main函数都是不带参数的。因此main 后的括号都是空括号。实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数。C语言规定mai...
  • hgl868
  • hgl868
  • 2011年12月09日 16:55
  • 6110

linux c/c++程序是否都是从main函数开始?

请抛弃思维定势 以下为《程序员自我修养》片断,共勉
  • timegoesby001
  • timegoesby001
  • 2013年11月28日 19:18
  • 1126

C++ 之 main函数的调用与被调用

main函数能调用自身吗? 其他函数能调用main函数么? 下面先看一段有意思的程序,一个简洁有趣的打印菱形的程序。 [cpp] view plaincopy ...
  • u013630349
  • u013630349
  • 2015年09月03日 22:08
  • 1578

C++学习笔记 - main()函数及其参数

main()函数及其参数:int main(int argc, char *argv[] C++标准允许主函数main()有或没有参数列表。 您能在主函数main()中使用一个或更多的参数。 如下是...
  • hawkol
  • hawkol
  • 2016年10月18日 17:59
  • 739

论C和C++中main函数的重要性

论C和C++中main函数的重要性
  • duan19920101
  • duan19920101
  • 2016年02月22日 14:19
  • 435

C++程序进入main函数之前,退出main函数之后会做些什么?

我们看下面的例子:          /* file name test00.c */          int main(int argc, char* argv)     {      retur...
  • xiongbixb2
  • xiongbixb2
  • 2015年11月08日 10:40
  • 774

main函数前的秘密

如何让一段代码跑在main()函数前面。一个熟练的C++开发者能够轻易给出答案,即静态初始化。    除此之外,下面讲一个VC里的方法。int initBeforeMain() { printf...
  • ithzhang
  • ithzhang
  • 2013年02月13日 09:45
  • 1911

main函数究竟应该怎么写?

在大多数程序语言里,程序由main函数开始执行,因此被称之为入口函数。然而,当你学了编程一段时间后,你肯定见过不止一种main函数的写法。你有木有想过,究竟那种写法才算是标准的呢?毕竟各个平台对编译器...
  • booirror
  • booirror
  • 2013年10月21日 19:27
  • 4362
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【C++】main函数的秘密
举报原因:
原因补充:

(最多只允许输入30个字)