Share via


Opérateur d'expression conditionnelle

C contient un opérateur ternaire : l'opérateur d'expression conditionnelle (? :).

Syntaxe

conditional-expression:
logical-OR-expression
logical-OR-expression ? expression : conditional-expression

logical-OR-expression doit être de type intégral, flottant ou pointeur. Il est évalué en termes d'équivalence à 0. Un point de séquence suit logical-OR-expression. L’évaluation des opérandes continue comme suit :

  • Si logical-OR-expression elle n’est pas égal à 0, expression est évalué. Le résultat de l'évaluation de l'expression est fourni par l'élément non terminal expression. (Cela signifie que expression est évaluée uniquement si logical-OR-expression a la valeur true.)

  • Si logical-OR-expression est égal à 0, conditional-expression est évalué. Le résultat de l’expression est la valeur de conditional-expression. (Cela signifie que conditional-expression est évaluée uniquement si logical-OR-expression a la valeur false.)

L’effet expression ou conditional-expression est évalué, mais pas les deux.

Le type du résultat d’une opération conditionnelle dépend du type de l’opérande expression ou conditional-expression, comme suit :

  • Si expression ou conditional-expression a un type intégral ou flottant (leurs types peuvent être différents), l'opérateur exécute les conversions arithmétiques habituelles. Le type du résultat est le type des opérandes après conversion.

  • Si expression et conditional-expression ont le même type de structure, d'union, ou de pointeur, le type du résultat est le même type de structure, d'union ou de pointeur.

  • Si les deux opérandes ont le type void, le résultat a le type void.

  • Si l'un des opérandes est un pointeur vers un objet de tout type, et que l'autre opérande est un pointeur vers void, le pointeur vers l'objet est converti en pointeur vers void et le résultat est un pointeur vers void.

  • Si expression ou conditional-expression est un pointeur et que l’autre opérande est une expression constante ayant la valeur 0, le type du résultat est le type de pointeur.

Dans la comparaison de type pour les pointeurs, les qualificateurs de type (const ou volatile) dans le type vers lequel le pointeur pointe ne sont pas significatifs, mais le type de résultat hérite des qualificateurs des deux composants du conditionnel.

Exemples

Les exemples suivants illustrent différentes utilisations de l'opérateur conditionnel :

j = ( i < 0 ) ? ( -i ) : ( i );

Cet exemple assigne la valeur absolue de i à j. Si i est inférieur à 0, -i est assigné à j. Si i est supérieur ou égal à 0, i est assigné à j.

void f1( void );
void f2( void );
int x;
int y;
    .
    .
    .
( x == y ) ? ( f1() ) : ( f2() );

Dans cet exemple, deux fonctions, f1 et f2, et deux variables, x et y, sont déclarées. Ultérieurement dans le programme, si deux variables ont la même valeur, la fonction f1 est appelée. Sinon, c'est f2 qui est appelée.

Voir aussi

Opérateur conditionnel : ? :