Maison  >  Article  >  développement back-end  >  Pourquoi `i = i ` conduit-il à un comportement indéfini en C ?

Pourquoi `i = i ` conduit-il à un comportement indéfini en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-25 09:07:29292parcourir

Why Does `i = i  ` Lead to Undefined Behaviour in C  ?

Le comportement non défini de i = i

La norme C définit le « comportement non défini » comme un comportement qui n'est pas explicitement spécifié par la norme. Cela signifie que le compilateur est libre de générer le code qu'il souhaite lorsqu'il rencontre un comportement non défini, même si cela entraîne une sortie imprévisible ou erronée.

Un exemple de comportement non défini est l'attribution d'une valeur à une variable qui est sur le point d'être modifié. Considérez l'extrait de code suivant :

<code class="cpp">i = 3;
i = i++;</code>

Selon la norme, ce code entraînera un comportement indéfini. Cependant, on suppose souvent que la valeur finale de i sera 4, quel que soit l’ordre d’évaluation. Ce n'est pas nécessairement vrai.

Le compilateur pourrait émettre du code équivalent à l'un des éléments suivants :

<code class="cpp">i = 3;
int tmp = i;
++i;
i = tmp;

i = 3;
++i;
i = i - 1;

i = 3;
i = i;
++i;</code>

Dans les deux premiers cas, la valeur finale de i sera 4. Cependant, dans le troisième cas, la valeur finale de i sera 3.

Par conséquent, il est incorrect de supposer que la valeur finale de i sera toujours 4. Le comportement réel n'est pas défini et dépend du compilateur.

En règle générale, il est préférable d'éviter les comportements indéfinis. Si vous rencontrez du code présentant un comportement indéfini, il est important de le corriger dès que possible.

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