Dalla A alla Z passando per C - Robotica
Dalla A alla Z passando per C - Robotica
Dalla A alla Z passando per C - Robotica
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