是 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"