sont des opérateurs à part entière.
Cela signifie que ces opérateurs, que l'on peut appeler opérateurs
d'adressage, ont une priorité et sont en
concurrence avec les autres opérateurs pour déterminer la sémantique
d'une expression.
Par exemple, la sémantique de l'expression *p++ ne peut se déterminer
que si l'on connaît les priorités relatives des opérateurs * et
++.
Pour déterminer la sémantique d'une expression il faut non seulement
connaître la priorité
des opérateurs mais également leur associativité.
En effet, seule la connaissance de l'associativité de l'opérateur ==
permet de savoir si a == b == c signifie (a == b) == c
ou si elle signifie a == (b == c).
Un opérateur a une associativité à droite quand :
aopbopc
signifie aop( bopc).
Un opérateur a une associativité à gauche quand :
aopbopc
signifie (aopb)opc.
Nous donnons ci-dessous le tableau exhaustif des opérateurs avec leurs
priorités et leurs associativité.
Les choix fait pour les priorités des opérateurs sont assez mauvais,
les concepteurs du langage eux-mêmes en conviennent.
Les choix les plus irritants sont les suivants :
-
La précédence des opérateurs bits à bits est plus petite que celle
des opérateurs de comparaison. Donc a&b == c ne signifie
pas (a&b) == c, mais a & (b==c).
-
La précédence des opérateurs de décalage est plus petite que celle
des opérateurs de + et -. Donc a << 4 + b signifie
a << (4 + b).
Il est considéré comme un bon style de programmation en C, de systématiquement
parenthéser les expressions dès qu'elles comportent d'autres opérateurs
que les opérateurs de l'arithmétique usuelle.
À part quelques exceptions,
l'ordre d'évaluation des opérandes d'un opérateur n'est pas
spécifié par le langage.
Ceci a pour conséquence que le programmeur doit faire extrêmement attention
aux effets de bords dans les expressions.
Par exemple, l'instruction :
t[i] = f();
où la fonction f modifie la valeur de i a un comportement
indéterminé : il est impossible de savoir si la valeur prise
pour indexer t sera celle de i avant ou après l'appel à f.
Suivant:Récréation Début:Les expressions Précédent:Opérateur conversion 30/9/1997