On va etre clair:
Code:
1 2 3
|
int n = 5, x;
x = ++n * --n; |
est un comportement indefini.
N'importe quoi peut arriver a partir du moment ou le code doit etre execute, y compris
avant l'execution (je ne connais pas de cas, pour d'autre cas de comportement indefini tel que le dereferencement d'un pointeur nul ou du depassement de capacite des entiers signes, ca c'est deja vu suite a des optimiseurs pousses).
Si tu veux des references, cherche "
sequence point" dans la norme et le paragraphe suivant
(Note: il est bien connu que la formation de la norme n'est pas toujours claire en ce qui concerne les points de sequencement, entre autres problemes, il n'est pas necessairement d'ordre total entre eux; la prochaine norme utilisera un concept different pour expliquer ce genre de choses, entre autres pour specifier des contraintes sur le multi-threads).