Maison  >  Article  >  développement back-end  >  Pourquoi la sortie de plusieurs incréments de publication dans une expression C est-elle imprévisible ?

Pourquoi la sortie de plusieurs incréments de publication dans une expression C est-elle imprévisible ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-05 21:58:02382parcourir

Why is the Output of Multiple Post Increments in a C   Expression Unpredictable?

Comportement de l'incrément de publication en C

En C , l'incrément de publication (par exemple, i ) incrémente une variable mais renvoie la valeur d'origine. Comprendre son comportement est crucial dans les expressions complexes.

Considérez le code suivant :

<code class="cpp">int i = 5;

cout << i++ << i-- << ++i << --i << i << endl;</code>

Cette instruction évalue l'expression i i-- i --i i avant de générer le résultat. Cependant, l'ordre d'évaluation n'est pas défini, ce qui conduit à un résultat imprévisible (par exemple, "45555").

Décomposons la règle des points de séquence :

  • Points de séquence : En C , certains points du code forcent l'évaluation des opérations en attente. Ces points incluent des points-virgules (;), des virgules (,) et la fin de l'instruction.
  • Comportement non défini : Dans le code ci-dessus, il existe des effets secondaires non séquencés sur la variable scalaire i en raison des opérations de post-incrémentation. Cela entraîne un comportement indéfini.

Exemple :

<code class="cpp">int x = 20, y = 35;

x = y++ + y + x++ + y++;</code>

Cette expression est évaluée dans l'ordre suivant :

  1. y : Incrémente y à 36 et renvoie 35 (la valeur d'origine de y).
  2. x : Incrémente x à 21 et renvoie 20 (la valeur d'origine de x).
  3. y : Incrémente y à 37 et renvoie 36 (la valeur originale de y).
  4. x : Incrémente x à 22 et renvoie 21 (la valeur originale de x).

Par conséquent, la valeur finale de x est 126 (35 36 20 21), tandis que y est 37.

Conclusion :

L'incrémentation post en C peut conduire à un comportement indéfini lorsqu'il est utilisé dans des expressions non séquencées. Il est essentiel de comprendre les points de séquence et d'éviter les effets secondaires sur la même variable dans un contexte non séquencé.

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