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.
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