"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Chamar recursivamente `main()` é permitido em C++?

Chamar recursivamente `main()` é permitido em C++?

Publicado em 2024-11-04
Navegar:950

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

Chamando a função principal recursivamente em C

O trecho de código forneceu tentativas de chamar a função main() recursivamente dentro de si mesmo em C . No entanto, é importante observar que esse comportamento não é permitido em estrita conformidade com C.

Chamar recursivamente main() é permitido em C?

De acordo com o padrão C , uma função não pode chamar a si mesma diretamente, incluindo a função main(). Esta restrição tem como objetivo evitar recursão infinita e garantir o encerramento do programa.

Implementação prática com g

Apesar do padrão da linguagem, é possível chamar main() recursivamente na prática usando o compilador GNU C (g). g não aplica estritamente o padrão a esse respeito, permitindo que código com chamadas main() recursivas seja compilado e executado.

Código de exemplo

O seguinte trecho de código modificado demonstra chamadas recursivas main() usando g :

#include 
#include 
using namespace std;

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

Quando compilado e executado, este código irá gerar a seguinte saída:

y = 3
y = 6
y = 7

Assembly Analysis

Examinar o assembly gerado para este código revela que g trata chamadas main() recursivas como qualquer outra chamada de função:

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

Nota:

Embora esse comportamento seja possível com g , é crucial observar que não é garantido. Outros compiladores podem aderir estritamente ao Padrão C, resultando em erros de compilação ou comportamento inesperado. Portanto, usar chamadas main() recursivas não é uma prática recomendada.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3