18.08.2013 Views

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

La prima espressione è composta da più o<strong>per</strong>atori senza parentesi che ne cambiano la precedenza.<br />

Se op1 ha precedenza maggiore di op2, viene prima valutata l’espressione espr1 op1 espr2, ed<br />

il risultato viene composto a destra con espr3; se invece op1 ha precedenza minore di op2,<br />

viene prima valutata l’espressione espr2 op2 espr3, ed il risultato viene composto a sinistra con<br />

espr3.<br />

6.2 Ordine di valutazione<br />

L’ordine di valutazione delle espressioni sulle quali un o<strong>per</strong>atore viene applicato non è specificato<br />

dal linguaggio C, ovvero tale ordine è indefinito.<br />

Se espr1 e espr2 sono sotto-espressioni composte con l’o<strong>per</strong>atore op, come nell’esempio<br />

espr1 op espr2<br />

allora si ha che:<br />

• l’ordine di valutazione di espr1 e espr2 è indefinito<br />

• se viene valutata prima espr1 o prima espr2 dipende dal compilatore<br />

6.3 Il concetto di side effect<br />

Si definisce “side effect” (o effetto collaterale) il risultato di un o<strong>per</strong>atore, espressione, o funzione<br />

che <strong>per</strong>siste dopo la sua valutazione.<br />

Nell’esempio:<br />

x = 10;<br />

il side effect consiste nel fatto che dopo la valutazione dell’espressione il valore di x cambia<br />

<strong>per</strong>manentemente in 10.<br />

6.4 Side effect e ordine di valutazione<br />

L’ordine indefinito di valutazione delle espressioni può causare problemi quando più di un<br />

o<strong>per</strong>atore che causa un side effect è utilizzato nella stessa espressione:<br />

Nell’esempio seguente:<br />

i = 0;<br />

c = a[i] + b[++i];<br />

il risultato della seconda espressione può essere<br />

• c = a[0] + b[1] OPPURE<br />

• c = a[1] + b[1]<br />

a seconda del compilatore che viene utilizzato.<br />

Per questo motivo è bene evitare di usare espressioni che producano effetti collaterali su<br />

variabili utilizzate anche in altre parti della stessa espressione.<br />

54

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!