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