Search code examples
cprogram-entry-point

is return main(); a valid syntax?


I found some interesting code lines:

#include <stdio.h>

int main()
{
    printf("Hi there");
    return main();
}

It compiles OK (VS2013) and ends up in stackoverflow error because of the recursive call to main(). I didn't know that the return statement accepts any parameter that can be evaluated to the expected return data type, in this example even int main().

Standard C or Microsoft-ish behaviour?


Solution

  • I didn't know that the return statement accepts any parameter that can be evaluated to the expected return data type,

    Well, a return statement can have an expression.

    Quoting C11 standard, chapter 6.8.6.4, The return statement.

    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.

    so, in case of return main();, the main(); function call is the expression.

    And regarding the behaviour of return main();, this behaves like a normal recursive function, the exception being an infinite recursion in this case.

    Standard C or Microsoft-ish behaviour?

    As long as C standard is considered, it does not impose any restriction upon calling main() recursively.

    However, FWIW, AFAIK, in C++, it is not allowed.