Tenía la curiosidad de que pasaría en un programa C con el siguiente código:

int main (void)
{
return(main());
}

Por un lado la función main, y por lo tanto el programa, acaban cuando se sale de esa función, bien porque ha acabado, bien porque se hace un return (como en este caso), o bien porque se ha abortado la ejecución, por ejemplo con exit.

Por otro lado, el programa empieza cuando se ejecuta main.

En este código, main acaba volviendo a llamarse a si mismo… Así que no sabía a ciencia cierta que pasaría. Seguramente todo acabaría con un desbordamiento de pila.

¿Cuál sería el resultado de un programa que acaba iniciándose de nuevo?

Así que he cogido el Visual C++ 6.0 SP5 de Microsoft, y he probado dicho código en un ejecutable de consola.

Podeis descargar el espacio de trabajo, el proyecto, el fuente y el compilado de aquí.

El resultado es de nuevo curioso. El programa nunca acaba, pero tampoco genera un desbordamiento de pila (y eso que me he asegurado de que las llamadas fueran por pila con la convención _cdecl).

Nunca te acostarás sin aprender algo nuevo…