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

## La récursivité illimitée en C 11 est-elle considérée comme un comportement non défini ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-26 00:59:02609parcourir

## Does Unbounded Recursion in C  11 Qualify as Undefined Behavior?

La récursion illimitée est-elle un comportement indéfini ?

En C 11, les boucles infinies sans effets secondaires sont considérées comme un comportement indéfini (UB), comme en témoigne le code suivant :

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

Ce comportement est dicté par la norme C, qui stipule qu'une implémentation peut supposer que n'importe quel thread finira par se terminer, effectuera des opérations d'E/S, accédera/modifiera des objets volatiles ou exécutera synchronisation ou opérations atomiques.

La question se pose : cette définition s'applique-t-elle également à la récursivité illimitée, comme le montre le code suivant :

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

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

Selon le standard C, le comportement des deux programmes n'est pas défini car aucun d'eux n'effectue aucune des actions spécifiées dans la définition de non-UB de la norme.

Cependant, il est important de noter que même si la norme C ne considérait pas la récursion illimitée UB, elle pourrait toujours présentent un comportement indéfini si la récursion dépasse la limite de l'implémentation concernant le nombre d'appels de fonctions récursives imbriquées. Cela a toujours été le cas, et cela reste vrai quel que soit le statut de la boucle comme UB selon la norme C.

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