Maison >développement back-end >C++ >Pourquoi l'appel récursif de `main()` entraîne-t-il un comportement non défini en C ?
L'extrait de code ci-dessous a soulevé des questions parmi les programmeurs :
int main () { return main(); }
Il se compile sans erreurs mais ne parvient pas à terminer l'exécution, ce qui conduit à des spéculations sur son comportement.
Comportement non défini : le Enigme de main
Selon le standard C, [basic.start.main](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/ p0689r2.html#3.6.1) indique que "La fonction main ne doit pas être nommée par une expression." Cela implique qu'il est interdit d'appeler main au sein du programme.
Comportement du compilateur : avertissements ou silence ?
Les compilateurs peuvent gérer ce cas spécifique différemment. GCC, avec l'option -pedantic activée, émet un avertissement concernant l'utilisation illégale de main. Visual Studio reste cependant silencieux, choisissant de ne pas avertir de la nature récursive du code.
Que se passe-t-il lorsque vous appelez main ?
La réponse à cette question se situe dans le domaine du comportement indéfini. La norme ne définit pas ce qui doit se passer lorsque main est appelé dans le programme. En conséquence, tout comportement observé est imprévisible et dépendant de l'implémentation.
Conclusion
Appeler main au sein du programme est une action indéfinie et son comportement ne peut pas être prédit de manière fiable . Les compilateurs peuvent gérer ce cas différemment, en émettant des avertissements ou en échouant complètement à compiler. Tenter de définir le résultat d'un comportement indéfini est futile et peut conduire à des résultats inattendus et potentiellement dangereux.
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!