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
DDDoriginal
2024-12-18 18:52:11286parcourir

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();
}

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!

Déclaration:
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