web-dev-qa-db-fra.com

Que signifie l'opération c = a +++ b?

Le code suivant m'a confondu

int a=2,b=5,c;
c=a+++b;
printf("%d,%d,%d",a,b,c);

Je m'attendais à une sortie de 3,5,8, principalement parce que ++ signifie 2 +1, ce qui équivaut à 3, et 3 + 5 à 8; Il s'avère que le résultat est 3,5,7. Quelqu'un peut-il expliquer pourquoi c'est le cas?

31
user595985

Elle est analysée comme suit: c = a++ + b, et a++ signifie post-incrémentation, c'est-à-dire incrémentation après avoir pris la valeur a pour calculer a + b == 2 + 5.

S'il vous plaît, jamais écrivez un code comme celui-ci.

90
Fred Foo

Maximal Munch Rule s'applique à cette expression, selon laquelle l'expression est analysée comme suit:

c = a++ + b;

C'est-à-dire que a est post-incrémenté (a++) et que la valeur actuelle de a (avant post-incrémentation) est prise pour l'opération + avec b.

39
Nawaz

a ++ est post incrémentant, c’est-à-dire que l’expression prend la valeur de a et puis ajoute 1.
c = ++ a + b ferait ce que vous attendiez.

6
David

Ceci est un exemple de mauvais style de programmation.

Il est tout à fait illisible. Cependant, il incrémente a de sorte que la valeur actuelle de a est égale à b et incrémente ensuite a!

2
Stefano

Selon Longest Match rule, il est analysé sous la forme ++ + + b au cours de la phase d'analyse lexicale du compilateur. D'où la sortie résultante.

1
Vineet G

a ++ est évalué après l'expression.

c = ++ a + b; vous donnerait ce que vous pensiez.

1
jrok

L'opérateur post-incrémentation, a ++, modifie la valeur tge d'un après l'évaluation de la valeur d'un Puisque la valeur initiale de a est 2, c'est ce qui est utilisé pour calculer c; la valeur de a est modifiée pour refléter la nouvelle valeur après l'évaluation du ++.

1
Patrick87

a ++ + b ..it donne le résultat 7 et après la valeur d'expression de a, passe à 3 en raison de l'opérateur post increment

1
Aman Agarwal

Ici c = a +++ b; signifie c = (a ++) + b; c'est-à-dire post-incrémentation . En ++, des changements seront apportés à l'étape suivante au cours de laquelle nous imprimons a, b et c. En ++ a, c’est-à-dire que le préfixe incrémente les modifications dans la même étape et donne une sortie de 8.

0
Alok Negi