Maison > développement back-end > C++ > ## 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
Libérer: 2024-10-26 12:19:02
original
1012 Les gens l'ont consulté

## 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>
Copier après la connexion

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.
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal