"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Se permite llamar recursivamente a `main()` en C++?

¿Se permite llamar recursivamente a `main()` en C++?

Publicado el 2024-11-04
Navegar:175

Is Recursively Calling `main()` Allowed in C  ?

Llamar a la función principal de forma recursiva en C

El fragmento de código proporcionado intenta llamar a la función main() de forma recursiva dentro de sí mismo en C. Sin embargo, es importante tener en cuenta que este comportamiento no está permitido en el estricto cumplimiento de C.

¿Se permite llamar recursivamente a main() en C?

De acuerdo con el estándar C , una función no puede llamarse a sí misma directamente, incluida la función main(). Esta restricción tiene como objetivo evitar la recursividad infinita y garantizar la terminación del programa.

Implementación práctica con g

A pesar del estándar del lenguaje, es posible llamar a main() de forma recursiva en la práctica. usando el compilador GNU C (g). g no aplica estrictamente el estándar en este sentido, lo que permite compilar y ejecutar código con llamadas recursivas a main().

Código de ejemplo

El siguiente fragmento de código modificado demuestra llamadas recursivas a main() usando g :

#include 
#include 
using namespace std;

int main() {
    int y = rand() % 10; // returns 3, then 6, then 7
    cout 

Cuando se compila y ejecuta, este código generará el siguiente resultado:

y = 3
y = 6
y = 7

Análisis de ensamblaje

El examen del ensamblaje generado para este código revela que g trata las llamadas recursivas a main() como cualquier otra llamada a función:

main:
        ...
        cmpl    $7, -12(%rbp)
        je      .L7
        call    main
        ...
.L7:
        ...
        leave
        ret

Nota:

Si bien este comportamiento es posible con g , es fundamental tener en cuenta que no está garantizado. Otros compiladores pueden adherirse estrictamente al estándar C, lo que provocará errores de compilación o comportamientos inesperados. Por lo tanto, utilizar llamadas recursivas a main() no es una práctica recomendada.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3