Valor de expressão em C

Toda expressão em C tem um valor. Por exemplo, se x vale 20 então a expressão   3 * x + 4   tem valor 64.   Nas mesmas condições, a expressão

y = 3 * x + 4

tem valor  64.   O cálculo do valor dessa expressão tem o efeito colateral de atribuir à variável y o valor da subexpressão 3 * x + 4.   Assim, y passa a valer 64.

Outro exemplo:  se x vale 20 então o valor da expressão  x = x + 1  é  21.  O cálculo do valor dessa expressão tem o efeito colateral de incrementar o valor de x.

Eis um exemplo mais delicado, muito comum em C:  se x vale 20 então o valor da expressão

x++

é  20.  Um exemplo sutilmente diferente:  se x vale 20 então o valor da expressão

++x

é  21.  Em ambos os casos, as expressões têm como efeito colateral o incremento do valor de x, que passa a valer 21.

Algo análogo vale para expressões da forma  x--  e  --x.

Mais um exemplo: O valor da expressão   c = (a = 1) + (b = 2)   é  3.   O efeito colateral da expressão é atribuir os valores 1, 2 e 3 às variáveis a, bc respectivamente.

Último exemplo: No trecho de código abaixo, o valor da expressão  c = i  é  255  (e não −1, como alguém poderia imaginar):

unsigned char c;
int i;
i = -1;
c = i;