l'appel de main() dans main() en c
Est-il possible d'appeler main()
dans le main()
fonction en c?
- Avez-vous l'essayer? Fait-il?
- Rien ne vous empêche de l'appel d'une fonction à l'intérieur de son contexte. Cela s'appelle de la récursivité.
- juste parce que quelque chose semble travailler dans un exemple de test ne signifie pas que ce sera toujours le cas, ou est correct. "essayez-le et voyez si cela fonctionne" est souvent dangereux, en C.
- J'ai toujours aimé voir l'auteur a pris soin d'essayer au moins de la première et de partager ses expériences avant de poser la question. Je n'ai pas envie de personnes utilisant ce interactif de l'interface Google.
- C'est une question légitime, par exemple, la norme C++ spécifiquement interdit, alors qu'une "essayez-le et voyez si cela fonctionne" approche serait probablement montré que "ça marche" si cette question a été sur le C++, mais il ne serait pas correct.
- "Avez-vous l'essayer?" a peu à voir avec la question. Il y a beaucoup de choses ridicules compilateur implémentations permettent (comme
void *x; x+=42;
) qui ne sont pas légales C. Ceci, cependant (appel récursif demain
) est légal C. - À moins que votre version de C++ qui se passe à l'appel mondial des constructeurs à partir d'un invisible, premier-déclaration dans
main
, puis finit par les appeler à chaque fois que vous recurse enmain
... 😉 - Si vous souhaitez des exemples de
main()
appelmain()
, ici sont nombreuses: ioccc.org C'est le site de l'International Obfuscated C Code Contest, et en pliant le tout en un unique fonction appeléemain
est un moyen efficace de la dissimulation de la technique. - beaucoup de l'IOCCC les entrées ne sont pas conformes à la norme ISO C standard
- C'est vrai. Mais ils ne font pour des exemples intéressants 😉
Vous devez vous connecter pour publier un commentaire.
Oui, C vous permet d'appeler votre fonction main (alors que C++ ne pas )
main
(__main
est un nom commun pour elle), qui appelle tout le mondial des constructeurs. Avoir des objets globaux être reconstruit à chaque foismain
est appelée récursivement serait une plutôt mauvaise chose... 🙂main()
la récursivité, si elle s'adresse spécifiquement?Il est en effet possible d'appeler
main()
de lui-même, même en évitant le débordement de pile avec la même méthode utilisée pour tout autre récursive code, une condition d'arrêt tels que:qui, lorsqu'il est exécuté comme
testprog 1 2 3
, sorties:Cependant, puisque c'est seulement anecdotique preuve, nous devrions nous tourner vers le standard. ISO C11 section
4 Conformance
états:Maintenant, car il n'y a pas explicite interdiction n'importe où dans la norme sur
main()
appelant elle-même, la clause 3 ci-dessus est le contrôle de l'aspect.Soutien supplémentaire peut être vu en deux endroits (mon gras), d'abord dans la section
5.1.2.2.3 Program termination
:Puis dans la section
7.21.3 Files
:Ces deux sous-sections de la possibilité qu'il peut y avoir autres appels à
main()
sur et au-dessus de l'initiale/original.Oui, on peut appeler la méthode main() dans la fonction main ().
Le processus de l'appel d'une fonction par la fonction elle-même est connu comme la Récursivité.
Bien,vous pouvez appeler une fonction main() dans la fonction main (), mais vous devriez avoir une condition qui n'appelle pas la fonction main() pour terminer le programme.
Sinon,le programme ne sera jamais de retour et de courir à l'infini.
Oui, vous pouvez.
Programme Simple:
Explication:
Un
call stack
oufunction stack
est utilisée à plusieurs fins, mais la principale raison pour laquelle on est à garder la trace du point auquel chaque actif sous-programme doit renvoyer le contrôle quand il a terminé l'exécution.Un
stack overflow
se produit lorsque trop de mémoire est utilisée dans la pile d'appel.Ici fonction
main()
est appelée à plusieurs reprises et son adresse de retour est stockée dans la pile. Après pile mémoire est pleine. Il montrestack overflow error
.Oui , il est possible de faire appel principal() dans main() en C et C++. C'est un concept de "récursivité", où une fonction s'appelle elle-même.Par exemple:
Dans C:
En C++:
SORTIE de deux programmes:
*ici, le statique mot-clé est utilisé comme une vérification de base à la fin du programme, sinon il va le main() continuera d'appeler lui-même à l'infini. Par exemple
Ici main() appelle elle-même à l'infini parce que new integer " je " est créé à chaque fois dans de nouvelles main() avec la valeur initiale de la 1 si nous n'utilisons pas de statique mot-clé. Donc,
est vrai dans chaque main() appelée récursivement et le programme ne se termine jamais normalement.
Mais à l'aide de mot-clé static crée integer 'je' une seule fois(lors de la fonction main() est exécutée pour la première fois) et la valeur de " i " est incrémenté lors de chaque appel récursif de la fonction main().Donc, la récursion se termine lorsque " je " devient 6 return 0; exécute.
Plus d'infos. sur mot-clé static:
Fonction récursive avec variable statique
oui, il est possible d'appeler la fonction principale en elle-même. C'est un travail comme une fonction récursive, mais pour un temps infini(jusqu'à ce débordement de pile se produire).exemple de code