Maison >développement back-end >C++ >La fonction `main()` de C peut-elle être récursive ?

La fonction `main()` de C peut-elle être récursive ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-28 22:54:14273parcourir

Can C  's `main()` Function Be Recursive?

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 .

Conclusion

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

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