Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 返回main();有效的语法?_C_Main - Fatal编程技术网

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-可能是因为它是您可以编写的最简单的递归调用?就像在大多数情况下遇到递归一样,它只是在工程上很愚蠢,而且通常是不好的做法。这个例子将耗尽所有堆栈,然后崩溃并烧毁。的确令人印象深刻。