Duplicar posibles:
Can main function call itself in C++?llamada recursiva en C++ principal
me encontré con este problema muy interesante, pero un poco ilusoria. Pregunta 6.42 C++ cómo programar por Dietel "¿Se puede llamar de manera recursiva en su sistema?" Escriba un programa que contenga una función principal. Incluya el conteo de variables locales estáticas e inicialice a 1. Incremente e imprima el valor de conteo cada vez que llamada. Compilar el programa. ¿Qué ocurre?
escribí el programa de la siguiente manera pero en vez hice la recursividad se detiene después de 10 veces como si fuera para que siga funcionando lo hará paradas en un valor alrededor de 41000.
Mi pregunta: ¿cómo es legal llamar recursivamente a la función principal en C++, si este programa se ejecuta para apilar sobre flujo o falla de memoria, etc.? Explique.
#include <iostream>
using namespace std;
int main()
{
static int count = 0;
count++;
if(count <= 10) {
cout << count << endl;
return main(); //call main
}//end if
system("pause");
return 0;//successful completion
}//end main
que
Creo que también es útil citar las llamadas recursivas más legibles por humanos, pero menos generales, excepto para la función denominada main "de §5.2.2 [expr.call]/9 – Cubbi
@James, gracias para su respuesta, si el estándar de C++ establece lo anterior, entonces, ¿por qué los compiladores permiten la llamada recursiva? Encontré un comportamiento extraño de comprender. Agradecería su respuesta. – Sinan
No puedo responder eso para todos los compiladores, ya que solo estoy muy familiarizado con uno (Visual C++) y estoy familiarizado con algunos otros. Sin embargo, me atrevería a adivinar que 'main()' es tratado por el compilador como cualquier otra función. En Windows, 'main()' no es el punto de entrada llamado por el sistema operativo: no podría ser, porque el tiempo de ejecución de C tiene que trabajar para inicializar globales y preparar el entorno para su ejecución. Después de hacer esto, el tiempo de ejecución de C llama a su programa 'main()'. Entonces, realmente es solo otra función, pero _usted_ no tiene permitido llamarlo, solo el tiempo de ejecución de C puede llamarlo. –