expliquer pourquoi différence dans le même code

mon code est:

code(){ int x=7; x=x++; output x; //prints 8 in C, prints 7 in Java } 

Les gars le code ci-dessus: imprime 8 en C , et 7 en Java !!

Pourquoi cela est-il ainsi? S’il vous plaît, expliquez.

Cela va imprimer 7 en Java. x=x++; est équivalent à :

 int temp = x; x = x + 1; x = temp; 

Le résultat aurait été différent si vous aviez utilisé l’opérateur de préfixe ++x .

Voyez par vous-même ici: code java ; Code C.

Lire Quelqu’un pourrait-il expliquer ces comportements non définis (i = i ++ + ++ i, i = i ++, etc…) pour comprendre le résultat en C.

En Java, x=x++ , est évalué comme suit:

 int temp = x; x = x + 1; x = temp; 

Donc, fondamentalement, il n’y a pas de changement, c’est x après cette expression.

En C cependant, cette expression est un comportement indéfini . Voir aussi les points de séquence Wiki

Ce code provoque un comportement indéfini en C, le résultat peut donc être une défaillance quelconque, 7, 8, 15 ou un défaut de page. Pourquoi ce code donne 7, est important pour le compilateur.

Dans l’arrière-plan Java , les événements suivants se produisent (pour l’instruction i = i++ ):

 int temp = i; // store current value of ii = i + 1; // increase i because of i++ i = temp; // assign to i 
 x=x++; 

Cela donne des résultats arbitraires en C, principalement en fonction du compilateur. Lisez à propos sequential points en C. Vous pouvez vous référer à la C Programming par Dennis ritchie .

c’est à cause de la priorité de l’opérateur. = a plus de priorité en C que Java.