Maison > développement back-end > C++ > ## L'invocation de fonction récursive de queue a-t-elle un comportement non défini en C 11 ?

## L'invocation de fonction récursive de queue a-t-elle un comportement non défini en C 11 ?

Barbara Streisand
Libérer: 2024-10-25 11:17:02
original
475 Les gens l'ont consulté

## Is Tail-Recursive Function Invocation Undefined Behavior in C  11?

L'invocation de fonction récursive de queue est-elle un comportement non défini en C 11 ?

En C 11, des boucles infinies sans effets secondaires, telles que les suivantes , sont considérés comme un comportement indéfini (UB) selon la norme :

<code class="cpp">int main() {
   while (true) {}
}</code>
Copier après la connexion

La même logique s'applique-t-elle à une récursivité infinie sans effets secondaires, comme le code ci-dessous ?

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

int main() {
   foo();
}</code>
Copier après la connexion

Réponse :

Oui, cette récursivité est également UB, car elle ne satisfait pas aux conditions énoncées dans la norme C 11 pour les critères de terminaison.

Plus précisément, la norme précise que l'implémentation peut supposer que n'importe quel thread effectuera éventuellement l'une des actions suivantes :

  • Terminer
  • Appeler une fonction d'E/S de bibliothèque
  • Accéder ou modifier un objet volatile
  • Effectuer une synchronisation ou une opération atomique

Les invocations de fonctions récursives en queue ne répondent à aucun de ces critères et sont donc considérées comme UB.

Il est important de notez que quelle que soit cette interprétation standard, une récursivité excessive peut toujours conduire à un comportement indéfini si elle dépasse la limite de l'implémentation pour les appels de fonctions récursives imbriquées. Cela a toujours été le cas en 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 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