- Programmazione » Programmazione » Guida C - Manuale programmazione con articoli e risorse interessanti
Gli operatori: autoincremento e autodecremento
Autoincremento e autodecremento
Gli operatori di (auto)incremento e (auto)decremento sommano e, rispettivamente, sottraggono 1 alla variabile a cui sono applicati. L'espressione
++a;
incrementa di 1 il valore di a, mentre
--a;
lo decrementa. E' molto importante ricordare che essi possono essere prefissi o suffissi; possono, cioè, sia precedere che seguire la variabile a cui sono applicati. Il loro significato rimane il medesimo (sommare o sottrarre 1), ma il loro livello di precedenza cambia. Nell'espressione
a = ++b;
ad a viene assegnato il valore di b incrementato di 1, perché, in realtà, dapprima è incrementata la variabile b e successivamente il suo nuovo valore è assegnato ad a. Invece, con
a = b++;
ad a è assegnato il valore di b e solo successivamente questa è incrementata. Analoghe considerazioni valgono nel caso dell'operatore di decremento. Ancora: nella
if(a > ++b) ....
la condizione è valutata dopo avere incrementato b, mentre nella
if(a > b++) ....
dapprima è valutata la condizione e poi viene
incrementata b.
La differenza tra operatore prefisso e suffisso,
però, scompare quando l'autoincremento della
variabile sia parametro di una chiamata a funzione: con
riferimento ad una riga come
printf("%d
" ,++a);
spesso non è possibile sapere a priori se a
viene incrementata prima di passarne il valore a
printf(), o se, al contrario, l'incremento
è effettuato in seguito. Ci si potrebbe aspettare che
la scrittura ++a determini l'incremento prima
della chiamata, mentre a++ lo determini dopo;
tuttavia il C non stabilisce una regola univoca. Ciò
significa che ogni compilatore può regolarsi come
meglio crede. E questo a sua volta significa che possono
esserci compilatori che fissano a priori un modo univoco di
procedere, ed altri che invece decidono caso per caso in fase
di compilazione, sulla base, ad esempio, di opzioni di
ottimizzazione del codice in funzione della velocità,
della dimensione, e così via. E' dunque
indispensabile consultare molto attentamente la
documentazione del compilatore o, meglio ancora, evitare
possibili ambiguità dedicando all'incremento della
variabile un'istruzione separata dalla chiamata a
funzione, anche in vista di un possibile porting del
programma ad altri compilatori.
Gli operatori "++" e
"--" modificano sempre il valore della
variabile[2] a cui sono applicati.
- Articolo precedente Gli operatori: negazione algebrica
- Articolo successivo Gli operatori: cast e conversioni di tipo