Programmer en langage C
44
© Éditions Eyrolles
conduirait d’abord à convertir n en double ; les règles de conversions implicites amèneraient
alors à convertir p en double avant qu’ait lieu la division (en double). Le résultat serait
alors différent de celui obtenu par l’expression proposée en début de ce paragraphe (avec les
mêmes valeurs de n et de p, on obtiendrait une valeur de l’ordre de 3.33333...).
Bien entendu, comme pour les conversions forcées par une affectation, toutes les conversions
numériques sont réalisables par un opérateur de « cast », mais le résultat en est plus ou moins
satisfaisant (revoyez éventuellement le paragraphe précédent).
11 L’opérateur conditionnel
Considérons l’instruction suivante :
if ( a>b )
max = a ;
else
max = b ;
Elle attribue à la variable max la plus grande des deux valeurs de a et de b. La valeur de max
pourrait être définie par cette phrase :
Si a>b alors a sinon b
En langage C, il est possible, grâce à l’aide de l’opérateur conditionnel, de traduire presque
littéralement la phrase ci-dessus de la manière suivante :
max = a>b ? a : b
L’expression figurant à droite de l’opérateur d’affectation est en fait constituée de trois
expressions (a>b, a et b) qui sont les trois opérandes de l’opérateur conditionnel, lequel se
matérialise par deux symboles séparés : ? et :.
D’une manière générale, cet opérateur évalue la première expression qui joue le rôle d’une
condition. Comme toujours en C, celle-ci peut être en fait de n’importe quel type. Si sa valeur
est différente de zéro, il y a évaluation du second opérande, ce qui fournit le résultat ; si sa
valeur est nulle, en revanche, il y a évaluation du troisième opérande, ce qui fournit le résultat.
Voici un autre exemple d’une expression calculant la valeur absolue de 3*a + 1 :
3*a+1 > 0 ? 3*a+1 : -3*a-1
L’opérateur conditionnel dispose d’une faible priorité (il arrive juste avant l’affectation), de
sorte qu’il est rarement nécessaire d’employer des parenthèses pour en délimiter les différents
opérandes (bien que cela puisse parfois améliorer la lisibilité du programme). Voici, toutefois,
un cas où les parenthèses sont indispensables :
z = (x=y) ? a : b
Delannoy Livre.book Page 44 Mercredi, 6. mai 2009 4:26 16
44
© Éditions Eyrolles
conduirait d’abord à convertir n en double ; les règles de conversions implicites amèneraient
alors à convertir p en double avant qu’ait lieu la division (en double). Le résultat serait
alors différent de celui obtenu par l’expression proposée en début de ce paragraphe (avec les
mêmes valeurs de n et de p, on obtiendrait une valeur de l’ordre de 3.33333...).
Bien entendu, comme pour les conversions forcées par une affectation, toutes les conversions
numériques sont réalisables par un opérateur de « cast », mais le résultat en est plus ou moins
satisfaisant (revoyez éventuellement le paragraphe précédent).
11 L’opérateur conditionnel
Considérons l’instruction suivante :
if ( a>b )
max = a ;
else
max = b ;
Elle attribue à la variable max la plus grande des deux valeurs de a et de b. La valeur de max
pourrait être définie par cette phrase :
Si a>b alors a sinon b
En langage C, il est possible, grâce à l’aide de l’opérateur conditionnel, de traduire presque
littéralement la phrase ci-dessus de la manière suivante :
max = a>b ? a : b
L’expression figurant à droite de l’opérateur d’affectation est en fait constituée de trois
expressions (a>b, a et b) qui sont les trois opérandes de l’opérateur conditionnel, lequel se
matérialise par deux symboles séparés : ? et :.
D’une manière générale, cet opérateur évalue la première expression qui joue le rôle d’une
condition. Comme toujours en C, celle-ci peut être en fait de n’importe quel type. Si sa valeur
est différente de zéro, il y a évaluation du second opérande, ce qui fournit le résultat ; si sa
valeur est nulle, en revanche, il y a évaluation du troisième opérande, ce qui fournit le résultat.
Voici un autre exemple d’une expression calculant la valeur absolue de 3*a + 1 :
3*a+1 > 0 ? 3*a+1 : -3*a-1
L’opérateur conditionnel dispose d’une faible priorité (il arrive juste avant l’affectation), de
sorte qu’il est rarement nécessaire d’employer des parenthèses pour en délimiter les différents
opérandes (bien que cela puisse parfois améliorer la lisibilité du programme). Voici, toutefois,
un cas où les parenthèses sont indispensables :
z = (x=y) ? a : b
Delannoy Livre.book Page 44 Mercredi, 6. mai 2009 4:26 16
