Langage C:Ordre de priorité et associativité
Un article de WikiTuto.
| opérateurs | associativité | description |
|---|---|---|
| () [] -> . | -> | |
| ! ~ ++ -- - + & * (cast) | <- | unaires (* pointeurs) |
| * / % | -> | multiplicatifs |
| >> << | -> | décalages |
| < <= > >= | -> | relations d'ordre |
| = = != | -> | égalité |
| & | -> | binaire |
| ^ | -> | binaire |
| | | -> | binaire |
| && | -> | logique |
| | | | -> | logique |
| = += -= *= etc. | <- | affectation |
| , | <- | séquentiel |
Dans ce tableau, les opérateurs sont classés par priorité décroissante (même priorité pour les opérateurs d'une même ligne). Les opérateurs les plus prioritaires seront évalués en premier. L'associativité définit l'ordre d'évaluation des opérandes. La plupart se font de gauche à droite ( 4/2/2 donne (4/2)/2 donc 1 (et pas 4/(2/2))).
Les seules exceptions sont :
- les opérateurs unaires, écrits à gauche de l'opérateur. L'opérande est évalué puis l'opération est effectuée, le résultat est celui de l'opération; sauf dans le cas de l'incrémentation / décrémentation postfixée, où le résultat de l'expression est la valeur de l'argument avant l'opération.
- L'affectation : on calcule l'opérande de droite, puis on l'affecte à celui de gauche. Le résultat est la valeur transférée.
- La virgule : la valeur à droite est calculée avant celle à gauche (en particulier lors d'un appel de fonction). Exemple d'embrouille : fonction(tableau[i],++i);
- Les opérateurs logiques et conditionnel évaluent toujours leur premier argument. Le second par contre n'est évalué que si c'est nécessaire. Donc a && i++ ne change pas toujours i, contrairement à a & i++ (mais qui écrirait de telles horreurs ?)
Voir aussi
- Variables / identificateurs / adresse / pointeurs
- Expressions et opérateurs
- Opérateurs Arithmétiques
- Opérateurs relationnels
- Affectation
- Opérateurs d'adresses
- Autres opérateurs
- Ordre de priorité et associativité
Auteur :Patrick TRAU. Copyright : utilisation de ces documents libre pour tout usage personnel. Utilisation autorisée pour tout usage public non commercial, à condition de citer son auteur (Patrick TRAU, IPST, Université Louis Pasteur Strasbourg, email : Patrick.Trau (à) ipst-ulp.u-strasbg.fr ) et de me signaler tout usage intensif. Utilisation commerciale interdite sans accord écrit de ma part.



