C 返回main();有效的语法?
我发现了一些有趣的代码行:C 返回main();有效的语法?,c,main,C,Main,我发现了一些有趣的代码行: #include <stdio.h> int main() { printf("Hi there"); return main(); } #包括 int main() { printf(“你好”); 返回main(); } 它编译OK(VS2013),并由于递归调用main()而导致stackoverflow错误。我不知道return语句接受任何可以计算为预期返回数据类型的参数,在本例中甚至是int main() 标准C或Micros
#include <stdio.h>
int main()
{
printf("Hi there");
return main();
}
#包括
int main()
{
printf(“你好”);
返回main();
}
它编译OK(VS2013),并由于递归调用main()
而导致stackoverflow错误。我不知道return
语句接受任何可以计算为预期返回数据类型的参数,在本例中甚至是int main()
标准C或Microsoft ish行为
我不知道return语句接受任何可以计算为预期返回数据类型的参数
嗯,return
语句可以有一个表达式
引用C11
标准,第6.8.6.4章,返回语句
如果执行带有表达式的return
语句,则表达式的值将作为函数调用表达式的值返回给调用方
因此,如果返回main()
,即main()代码>函数调用是表达式
关于returnmain()的行为代码>,其行为类似于正常的递归函数,本例中的异常是无限递归
标准C
或Microsoft ish行为
只要考虑C
标准,它就不会对递归调用main()
施加任何限制
但是,FWIW,AFAIK,在C++
中是不允许的。在C中,main
可以像任何其他函数一样调用,例如在程序中的返回语句中
与其他函数一样,允许递归调用main
,没有特殊限制:
(C11,6.5.2.2p11)“应允许通过任何其他函数链直接或间接进行递归函数调用。”
C++中,不允许调用<代码>主< /COD>,因此函数不能在返回语句中调用。
(C++11,3.6.1p3)“主功能不得在程序中使用”
了解函数。提示:main()?这只是一个常规的递归调用。@FilipeGonçalves-可能是因为它是您可以编写的最简单的递归调用?就像在大多数情况下遇到递归一样,它只是在工程上很愚蠢,而且通常是不好的做法。这个例子将耗尽所有堆栈,然后崩溃并烧毁。的确令人印象深刻。