Maison  >  Article  >  développement back-end  >  ## La récursivité sans effets secondaires est-elle un comportement indéfini en C ?

## La récursivité sans effets secondaires est-elle un comportement indéfini en C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-26 12:19:02964parcourir

## Is Recursion Without Side Effects Undefined Behavior in C  ?

La récursion sans effets secondaires est-elle un comportement indéfini ?

En C 11, les boucles infinies sans effets secondaires, telles que les suivantes, sont considérées comme indéfinies comportement (UB) :

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

Le comportement est UB en raison d'une disposition de la norme ISO C 11 (1.10p24) qui stipule :

The implementation may assume that any thread will eventually do one of the following:
 - terminate, 
 - make a call to a library I/O function, 
 - access or modify a volatile object, or 
 - perform a synchronization operation or an atomic operation.

Cette disposition s'applique à la fois au exemple de boucle et le programme récursif suivant :

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

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

Dans ce programme récursif, il n'y a pas d'effets secondaires, mais il est également considéré comme UB car il viole l'hypothèse selon laquelle n'importe quel thread finira par effectuer l'une des actions répertoriées dans 1.10p24.

Notez que même si cette disposition n'existait pas, la récursivité pourrait toujours présenter un comportement indéfini si elle dépasse la limite définie par l'implémentation pour les appels de fonctions récursives imbriquées. Cela a toujours été le cas en C , quelle que soit la version.

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