Explorer la légalité de la récursion dans Main() en C
Un débat récurrent parmi les programmeurs est la légalité de la récursivité dans main() en C C. Alors que certaines sources suggèrent que cela est interdit, d'autres démontrent le comportement apparemment contradictoire des compilateurs acceptant un tel code.
Le point de vue du standard C
Selon le standard C en 3.6. 1/3, la récursion dans main() est explicitement interdite : "La fonction main ne doit pas être utilisée dans un programme."
Comprendre "Utilisé" dans le contexte de la norme
La norme définit "utilisé" comme : "Un objet ou une fonction non surchargée est utilisé si son nom apparaît dans une expression potentiellement évaluée."
Dans le cas de l'exemple de code présenté :
int main() { main(); }
Le L'appel à main() apparaît dans le corps de main(), qui est une expression potentiellement évaluée. Par conséquent, selon la définition de la norme, main() est utilisé dans le programme, ce qui le rend illégal.
Comportement du compilateur et exceptions potentielles
Malgré l'interdiction de la norme, les compilateurs aiment g peut compiler un tel code sans erreur. Ce comportement n’est généralement pas recommandé et ne doit pas être invoqué. Les compilateurs peuvent gérer de telles situations de manière non standard ou spécifiques à l'implémentation.
Éviter la récursion dans Main()
Pour garantir la conformité à la norme C et éviter les problèmes potentiels , il est fortement conseillé d'éviter la récursion dans main(). Envisagez plutôt d'utiliser des modèles de conception ou des techniques de programmation alternatives pour obtenir la fonctionnalité souhaitée sans enfreindre les règles du langage.
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!