Cosa significa l’operazione c = a +++ b?

Il seguente codice mi ha confuso

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

Mi aspettavo che l’uscita fosse di 3,5,8, principalmente perché un ++ significa 2 +1 che equivale a 3, e 3 + 5 equivale a 8, quindi mi aspettavo 3,5,8. Si scopre che il risultato è 3,5,7. Qualcuno può spiegare perché questo è il caso?

Viene analizzato come c = a++ + b , e a++ significa post-incremento, ovvero incrementa dopo aver preso il valore di a per calcolare a + b == 2 + 5 .

Per favore, mai scrivere un codice come questo.

La regola Maximal Munch si applica a tale espressione, secondo la quale l’espressione viene analizzata come:

 c = a++ + b; 

Cioè, a è post-incrementato ( a++ ) e quindi il valore corrente di a (prima del post-incremento) è preso per + operazione con b .

a ++ è post incrementale, cioè l’espressione prende il valore di ae quindi aggiunge 1.
c = ++ a + b farebbe quello che ti aspetti.

Questo è un esempio di cattivo stile di programmazione.

E ‘abbastanza illeggibile, tuttavia post incrementa a così da sumre il valore corrente di a a be incrementi a successivi!

a ++ viene valutato dopo l’espressione.

c = ++ a + b; ti darebbe quello che pensavi

L’operatore di incremento post, a ++, cambia il valore di tge dopo che il valore di a viene valutato nell’espressione. Poiché il valore originale di a è 2, questo è ciò che viene usato per calcolare c; il valore di a viene modificato per riflettere il nuovo valore dopo che viene valutato il ++.

a ++ + b ..it dà il risultato 7 e dopo che il valore dell’espressione di a è aggiornamento a 3 a causa dell’operatore di incremento post

In base alla regola della corrispondenza più lunga , viene analizzata come ++ ++ + b durante la fase di analisi lessicale del compilatore. Da qui l’output risultante.