Suponiendo que el tamaño de int es de 4 bytes, ¿qué sucederá cuando compilemos y ejecutemos el siguiente programa?
#include “stdio.h” int main() { printf(“GeeksQuiz\n”); main(); return 0; }
(A) No podemos usar main() dentro de main() y el compilador lo detectará mostrando un error de compilación.
(B) GeeksQuiz se imprimirá 2147483647 veces, es decir, (2 elevado a 31) – 1.
(C) Imprimirá GeeksQuiz infinitas veces, es decir, el programa seguirá ejecutándose indefinidamente hasta que finalice por otros medios, como CTRL+C o CTRL+Z, etc.
(D) GeeksQuiz se imprimiría solo una vez. Porque cuando main() se usa dentro de main(), el compilador lo ignora en tiempo de ejecución. Esto es para asegurarse de que main() se llame solo una vez.
(E) GeeksQuiz se imprimirá hasta que ocurra un desbordamiento de pila para este programa.
Respuesta: (E)
Explicación:En primer lugar, no hay restricciones para que main() llame a main(), es decir, la recursividad también puede ocurrir para main(). Pero no hay una condición de terminación explícita mencionada aquí para esta recursividad. Entonces main() estaría llamando a main() después de imprimir GeeksQuiz. Esto continuará hasta que la pila del programa se llene por completo. Tenga en cuenta que la pila (interna de un programa en ejecución) almacena la secuencia de la función de llamada, es decir, qué función ha llamado a qué función para que el control pueda devolverse cuando regrese la función llamada. Es por eso que aquí en el programa, main() continuaría llamando a main() hasta que la pila completa termine, es decir, ocurra un desbordamiento de pila.
Cuestionario de esta pregunta
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA