© Éditions Eyrolles
33
chapitre n° 3
Les opérateurs et les expressions en langage C
dont la fonction a été déclarée dans le programme qui l’utilise (on peut trouver : aucune déclaration, une déclaration partielle ne mentionnant pas le type des arguments ou une déclaration
complète dite prototype mentionnant le type des arguments).
Lorsque le type des arguments n’a pas été déclaré, les valeurs transmises en argument sont
soumises aux règles précédentes (donc, en particulier, aux promotions numériques) auxquelles
il faut ajouter la promotion numérique float -> double. Or, précisément, c’est ainsi que sont
traitées les valeurs que vous transmettez à printf (ses arguments n’étant pas d’un type
connu à l’avance, il est impossible au compilateur d’en connaître le type !). Ainsi :
• tout argument de type char ou short est converti en int ; autrement dit, le code %c s’applique aussi à un int : il affichera tout simplement le caractère ayant le code correspondant ; de
même on obtiendra la valeur numérique du code d’un caractère c en écrivant : printf ("%d", c),
• tout argument de type float sera converti en double (et cela dans toutes les versions du
C) ; ainsi le code %f pour printf correspond-il à un double, et il n’est pas besoin de prévoir
un code pour un float.
4 Les opérateurs relationnels
Comme tout langage, C permet de comparer des expressions à l’aide d’opérateurs classiques
de comparaison. En voici un exemple :
2 * a > b + 5
En revanche, C se distingue de la plupart des autres langages sur deux points :
●
le résultat de la comparaison est, non pas une valeur booléenne (on dit aussi logique)
prenant l’une des deux valeurs vrai ou faux, mais un entier valant :
• 0 si le résultat de la comparaison est faux,
• 1 si le résultat de la comparaison est vrai.
Ainsi, la comparaison ci-dessus devient en fait une expression de type entier. Cela signifie
qu’elle pourra éventuellement intervenir dans des calculs arithmétiques ;
●
les expressions comparées pourront être d’un type de base quelconque et elles seront soumises
aux règles de conversion présentées dans le paragraphe précédent. Cela signifie qu’au bout
du compte on ne sera amené à comparer que des expressions de type numérique.
Voici la liste des opérateurs relationnels existant en C. Remarquez bien la notation (==) de
l’opérateur d’égalité, le signe = étant, comme nous le verrons, réservé aux affectations. Notez
également que = utilisé par mégarde à la place de == ne conduit généralement pas à un
diagnostic de compilation, dans la mesure où l’expression ainsi obtenue possède un sens (mais
qui n’est pas celui voulu).
Delannoy Livre.book Page 33 Mercredi, 6. mai 2009 4:26 16
Précédent

- 46/281

Suivant