Les boucles infinies sans effets secondaires sont explicitement considérées comme un comportement non défini (UB) dans la norme C 11. Considérez le programme suivant :
<code class="cpp">int main() { while (true) {} }</code>
Ce programme est UB car il n'effectue aucune action significative et peut continuer à s'exécuter indéfiniment.
Maintenant , considérons un programme récursif :
<code class="cpp">void foo() { foo(); } int main() { foo(); }</code>
Ce programme est-il également UB ?
La norme indique que (1.10p24) :
L'implémentation peut supposer que n'importe quel thread finira par effectuer l'une des opérations suivantes :
- terminer
- effectuer un appel à 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.
Cela s'applique aussi bien à la boucle infinie qu'à la récursivité.
Malgré cela, la récursion peut toujours entraîner un comportement indéfini si elle dépasse la limite d'implémentation des appels de fonctions récursives imbriquées. Cela a toujours été le cas.
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!