Maison > développement back-end > C++ > le corps du texte

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

Patricia Arquette
Libérer: 2024-10-25 09:07:29
original
291 Les gens l'ont consulté

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

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

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!