Maison > développement back-end > C++ > La fonction « main » peut-elle s'appeler de manière récursive en C ?

La fonction « main » peut-elle s'appeler de manière récursive en C ?

DDD
Libérer: 2024-12-18 18:52:11
original
189 Les gens l'ont consulté

Can the `main` Function Recursively Call Itself in C  ?

La fonction principale peut-elle s'appeler elle-même en C ?

Problème :

Le code suivant se compile sans erreurs mais entre dans un nombre infini loop:

int main() {
    return main();
}
Copier après la connexion

Réponse :

L'appel de la fonction principale depuis elle-même en C entraîne un comportement indéfini. Un comportement non défini signifie que tout peut arriver, notamment :

  • Le programme peut planter.
  • Le programme peut s'exécuter indéfiniment.
  • Le programme peut corrompre la mémoire.

Le standard C stipule explicitement que la fonction principale ne doit pas être nommée par une expression. Lorsque main s'appelle lui-même, le compilateur doit émettre un message de diagnostic et ne pas compiler le code.

Malgré cette exigence standard, certains compilateurs peuvent ne pas émettre de message de diagnostic et permettre au programme de se compiler. Cependant, l'exécution d'un tel programme invoque un comportement indéfini.

Comportement du compilateur :

Les compilateurs ne sont pas tenus d'appliquer toutes les règles de la norme C, y compris celle interdisant main de s'appelant. Ils peuvent émettre des avertissements ou des erreurs, mais le comportement exact varie selon les différents compilateurs et paramètres du compilateur.

Implications :

L'appel récursif de main est illégal en C . Même si un compilateur le permet, le programme présente un comportement indéfini et il ne faut pas s'y fier.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal