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?
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.
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
.
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.
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
!
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.
a ++ est évalué après l'expression.
c = ++ a + b; vous donnerait ce que vous pensiez.
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 ++.
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
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.