Maison >développement back-end >C++ >La fonction `main()` de C peut-elle être récursive ?
Restrictions de récursivité dans la fonction main() de C
En C, l'utilisation de la récursivité dans la fonction main() a été un sujet de débat. De nombreux développeurs ont observé que la collection de compilateurs GNU (g ) autorise la récursivité dans main() malgré la prétendue interdiction dans le standard C.
Restrictions standard
Conformément au Standard C (3.6.1/3), la récursion dans main() est explicitement interdite :
"La fonction main ne doit pas être utilisée (3.2) au sein d'un programme.
"Un objet ou une fonction non surchargée est utilisé si son nom apparaît dans une expression potentiellement évaluée."Donc, appeler main() depuis l'intérieur de lui-même constitue une "utilisation" et est donc interdit selon la norme.
Comportement du compilateur
Malgré l'interdiction de la norme, g compile le code suivant sans erreur :Cet écart se produit parce que le niveau d'optimisation par défaut de g inclut des fonctions inlining plus petites qu'un seuil préconfiguré. Étant donné que la récursivité dans ce code est un appel de fonction unique, elle tombe probablement en dessous du seuil et est intégrée par g .
Conclusionint main() { main(); }Bien que g puisse permettre la récursivité dans main () dans certains cas, le standard C l'interdit strictement. Les développeurs doivent respecter les exigences de la norme pour garantir l'exactitude du programme et éliminer les pièges potentiels.
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!