2012-09-11 5 views
0

de Possible en double:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)Increment opérateur en PHP et C Langue

J'ai rencontré un problème étrange qui concerne l'opérateur d'incrément.

-je obtenir une sortie différente de même expression en PHP et C.

In C language

main() 
{ 
    int i = 5; 
    printf("%d", i++*i++); // output 25; 
} 

In PHP

$i = 5; 
echo $i++*$i++; // output 30 

Quelqu'un peut-il expliquer ce comportement étrange? Merci.

+4

En C c'est un comportement indéfini, Donc, techniquement, vous pouvez obtenir n'importe quelle sortie. Bonne lecture: [Comportement indéterminé et points de séquence] (http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points –

+0

@Ashwini - Pourquoi est-ce important? Que voulez-vous utiliser comme code pour ça? –

+0

En PHP, ceci est également indéfini. Voir [Exemple 1] (http://php.net/manual/fr/language.operators.precedence.php). – netcoder

Répondre

3

En C le résultat est indéfini car l'un des deux opérandes pourrait être évalué en premier, donc le lire une seconde fois est erroné. Et, bien, en PHP, je ne serais pas surpris si le résultat était 42 en attente de quelques changements dans php.ini.

+1

Ma religion voudrait que je révise à cause de la mention de 42 mais je préfère ne pas sur un duplicata fermé ^^ " – Eregrith

1

Le comportement de ++ est indéfini quand il est utilisé dans ce style, que vous ne savez pas exactement quand l'opération aura lieu ++ et lorsque les valeurs seront « retour » de x++.

0

Ce comportement est indéfini depuis i++ ou ++i ou --i ou i-- n'incrémente pas/décrément dans un ordre particulier lorsqu'elle est transmise comme paramètre de fonction.

Non seulement cela, mais si je ne me trompe pas, je crois que printf("%d", i++*i++); est juste sortie 5*5, puis incrémente i deux fois.

rappelez-vous ++i incrémente avant l'opération, et i++ incrémente après l'opération. Considérez ce code:

int i, x = 5; 

int i = x++; // i is now equal to 5 and x is equal to 6 because the increment happened after the = operation. 
x = 5;   //set x back to 5 
i = ++x;  //i is now equal to 6 and x is equal to 6 because the increment happened before the = operation. 

Tel est le cas pour C Je ne peux cependant pas se porter garant pour PHP.