
Envoyé par
Médinoc
i++ modifie déjà la variable. i=i++, c'est deux modifications de la variable sans point de séquencement entre les deux, ce qui veut dire qu'on ne peut plus prévoir ce que i vaudra après cette ligne --> Comportement indéfini.
En théorie, dès qu'il y a un comportement indéfini, n'importe quoi peut arriver, car selon la norme le compilateur est en droit de faire n'importe quoi (y compris faire surgir des démons de ton nez, selon une expression commune dans le milieu informatique).
En pratique, un compilateur moderne fait ce qui arrange son optimiseur, et ça peut aller jusqu'à supprimer complètement tout le chemin d'exécution menant inconditionnellement à un comportement indéfini (oui, les comportements indéfinis sont rétroactifs, en plus, jusqu'au branchement conditionnel précédent). Dans le cas de ta fonction, un compilateur serait en droit de supprimer tout son contenu car il est indéfini (pour l'optimiseur, "tout peut arriver" ça inclut "rien du tout").
Partager