是 return main();一个有效的语法?
is return main(); a valid syntax?
我发现了一些有趣的代码行:
#include <stdio.h>
int main()
{
printf("Hi there");
return main();
}
它编译正常 (VS2013),但由于对 main()
的递归调用而导致 Whosebug 错误。我不知道 return
语句接受任何可以评估为预期 return 数据类型的参数,在这个例子中甚至 int main()
.
标准 C 或 Microsoft-ish 行为?
I didn't know that the return statement accepts any parameter that can be evaluated to the expected return data type,
嗯,一个 return
语句可以有一个表达式。
引用 C11
标准,第 6.8.6.4 章,return
语句。
If a return
statement with an expression is executed, the value of the expression is returned to the caller as the value of the function call expression.
所以,在 return main();
的情况下,main();
函数调用是 表达式 .
关于 return main();
的行为,它的行为就像一个普通的递归函数,例外是在这种情况下的无限递归。
Standard C
or Microsoft-ish behaviour?
只要考虑C
标准,对递归调用main()
没有任何限制。
但是,FWIW,AFAIK,在 C++
中是不允许的。
在 C 语言中,main
可以像任何其他函数一样被调用,例如在您的程序中的 return 语句中。
允许递归调用main
,就像其他函数一样,没有特殊限制:
(C11, 6.5.2.2p11) "Recursive function calls shall be permitted, both directly and indirectly through any chain of other functions."
在C++中,不允许调用main
,所以函数不能在return语句中调用。
(C++11, 3.6.1p3) "The function main shall not be used within a program"
我发现了一些有趣的代码行:
#include <stdio.h>
int main()
{
printf("Hi there");
return main();
}
它编译正常 (VS2013),但由于对 main()
的递归调用而导致 Whosebug 错误。我不知道 return
语句接受任何可以评估为预期 return 数据类型的参数,在这个例子中甚至 int main()
.
标准 C 或 Microsoft-ish 行为?
I didn't know that the return statement accepts any parameter that can be evaluated to the expected return data type,
嗯,一个 return
语句可以有一个表达式。
引用 C11
标准,第 6.8.6.4 章,return
语句。
If a
return
statement with an expression is executed, the value of the expression is returned to the caller as the value of the function call expression.
所以,在 return main();
的情况下,main();
函数调用是 表达式 .
关于 return main();
的行为,它的行为就像一个普通的递归函数,例外是在这种情况下的无限递归。
Standard
C
or Microsoft-ish behaviour?
只要考虑C
标准,对递归调用main()
没有任何限制。
但是,FWIW,AFAIK,在 C++
中是不允许的。
在 C 语言中,main
可以像任何其他函数一样被调用,例如在您的程序中的 return 语句中。
允许递归调用main
,就像其他函数一样,没有特殊限制:
(C11, 6.5.2.2p11) "Recursive function calls shall be permitted, both directly and indirectly through any chain of other functions."
在C++中,不允许调用main
,所以函数不能在return语句中调用。
(C++11, 3.6.1p3) "The function main shall not be used within a program"