Maison  >  Article  >  développement back-end  >  ## La récursivité infinie en C est-elle considérée comme un comportement indéfini ?

## La récursivité infinie en C est-elle considérée comme un comportement indéfini ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-26 18:47:03535parcourir

##  Is Infinite Recursion in C   Considered Undefined Behavior?

La récursivité infinie constitue-t-elle un comportement indéfini (UB) ?

Dans le domaine de la programmation C, la question de savoir si la récursivité infinie constitue un comportement indéfini ( UB) a fait l'objet de débats. Bien que certains scénarios impliquant des boucles aient été identifiés comme UB, il reste incertain si la récursivité infinie elle-même relève de cette classification.

En C 11, un programme contenant une boucle infinie sans effets secondaires, comme indiqué ci-dessous, est considéré UB :

<code class="cpp">int main() {
   while (true) {}
}</code>

Ceci est documenté dans le standard C sous la forme 1.10p24 : "L'implémentation peut supposer que n'importe quel thread finira par effectuer l'une des opérations suivantes : terminer, appeler une fonction d'E/S de bibliothèque , accéder ou modifier un objet volatile, ou effectuer une opération de synchronisation ou une opération atomique." Puisqu'une boucle infinie sans effets secondaires n'effectuera jamais aucune de ces actions, elle est considérée comme UB.

La question se pose alors de savoir si le programme suivant, impliquant une récursivité infinie, constitue également UB :

<code class="cpp">void foo() {
   foo();
}

int main() {
   foo();
}</code>

Bien que le programme ci-dessus puisse être intuitivement supposé être UB, la norme ne traite pas explicitement ce scénario spécifique. Le passage pertinent de la version 1.10p24 fait référence aux boucles et non à la récursion.

Cependant, il convient de noter qu'une récursivité excessive peut conduire au dépassement de la limite d'implémentation du nombre d'appels de fonctions récursifs imbriqués. Cela a toujours été le cas et peut entraîner un comportement indéfini, quelle que soit la classification UB de la récursivité elle-même.

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