Programmare in C – Precedenza fra gli operatori

Il C contiene molti operatori, e per via del meccanismo di precedenza fra operatori, le interazioni fra più operatori possono diventare complesse da capire.

X = 5+3*6

X riceve in assegnazione il valore 23 e non il valore 48, perchè in C la moltiplicazione e la divisione hanno una precedenza maggiore rispetto all'addizione e sottrazione.

char *a[10];

invece, che cosa significa? a è un puntatore singolo ad un array di 10 caratteri oppure è un array di 10 puntatori a carattere? Senza conoscere la precedenza fra operatori in C, non vi è modo di scoprilo.

La tabella seguente, tratta da C programming language di Kernighan e Ritchie, illustra la gerarchia di precedenze in C. Man mano che si scende nella tabella gli operatori hanno via via meno importanza.

Operatori Associatività
( [ - . da sinistra a destra
! - ++ -{- + * & (type-cast) sizeof da destra a sinistra
(nella linea precedente, +, - e * sono da considerarsi operatori unari)
* / % da sinistra a destra
+ - da sinistra a destra
<< >> da sinistra a destra
< <= > >= da sinistra a destra
== != da sinistra a destra
& da sinistra a destra
^ da sinistra a destra
| da sinistra a destra
&& da sinistra a destra
|| da sinistra a destra
?: da sinistra a destra
= += -= *= /= %= &= ^= |= <<= >>= da destra a sinistra
, da sinistra a destra
Grazie a questa tabella, si può interpretare char *a[10] come un array di 10 puntatori a carattere. Si consiglia di cercare di comprendere la tabella, ricordandovi che a volte piccoli e grandi bug possono essere dovuti ad un'errata interpretazione (da parte vostra!) della precedenza fra operatori.

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend