Operatore di espressione condizionale
C ha un operatore ternario: l'operatore conditional-expression (? :
).
Sintassi
conditional-expression
:
logical-OR-expression
logical-OR-expression
?
expression
:
conditional-expression
Deve logical-OR-expression
avere un tipo integrale, mobile o puntatore. Viene valutato in termini di equivalenza a 0. Un punto di sequenza segue logical-OR-expression
. La valutazione degli operandi prosegue nel modo seguente:
Se
logical-OR-expression
non è uguale a 0,expression
viene valutato. Il risultato della valutazione dell'espressione viene fornito dall'oggetto non deterministicoexpression
. Significa cheexpression
viene valutato solo selogical-OR-expression
è true.Se
logical-OR-expression
è uguale a 0,conditional-expression
viene valutato. Il risultato dell'espressione è il valore diconditional-expression
. (Significa checonditional-expression
viene valutato solo selogical-OR-expression
è false).
L'effetto è, o expression
conditional-expression
viene valutato, ma non entrambi.
Il tipo del risultato di un'operazione condizionale dipende dal tipo di expression
operando o conditional-expression
, come indicato di seguito:
Se
expression
oconditional-expression
ha un tipo integrale o mobile (i relativi tipi possono essere diversi), l'operatore esegue le normali conversioni aritmetiche. Il tipo del risultato è il tipo degli operandi in seguito alla conversione.Se e
expression
conditional-expression
hanno la stessa struttura, unione o tipo di puntatore, il tipo del risultato è lo stesso tipo di struttura, unione o puntatore.Se entrambi gli operandi possiedono il tipo
void
, il risultato è di tipovoid
.Se uno degli operandi è un puntatore a un oggetto di qualsiasi tipo e l'altro operando è un puntatore a
void
, il puntatore all'oggetto viene convertito in un puntatore avoid
e il risultato è un puntatore avoid
.expression
Se oconditional-expression
è un puntatore e l'altro operando è un'espressione costante con il valore 0, il tipo del risultato è il tipo di puntatore.
Nel confronto dei tipi per i puntatori qualsiasi qualificatore di tipo (const
o volatile
) nel tipo a cui i punti del puntatore sono insignificanti, ma il tipo di risultato eredita i qualificatori da entrambi i componenti dell'istruzione condizionale.
Esempi
Negli esempi seguenti vengono illustrati gli utilizzi dell'operatore condizionale.
j = ( i < 0 ) ? ( -i ) : ( i );
In questo esempio viene assegnato il valore assoluto i
a j
. Se i
è minore di 0, -i
è assegnato a j
. Se i
è maggiore o uguale a 0, i
è assegnato a j
.
void f1( void );
void f2( void );
int x;
int y;
.
.
.
( x == y ) ? ( f1() ) : ( f2() );
In questo esempio le due funzioni f1
e f2
e le due variabili x
e y
vengono dichiarate. Più avanti nel programma, se le due variabili presentano lo stesso valore, viene chiamata la funzione f1
. In caso contrario, viene chiamato f2
.