Operatore di espressione condizionaleConditional-Expression Operator

Il linguaggio C dispone di un operatore ternario: l'operatore di espressione condizionale (? :).C has one ternary operator: the conditional-expression operator (? :).

SintassiSyntax

conditional-expression:conditional-expression:
logical-OR-expressionlogical-OR-expression

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

logical-OR-expression deve essere di tipo integrale, a virgola mobile o puntatore.The logical-OR-expression must have integral, floating, or pointer type. Viene valutata in termini di equivalenza relativa a 0.It is evaluated in terms of its equivalence to 0. logical-OR-expression è seguita da un punto di sequenza.A sequence point follows logical-OR-expression. La valutazione degli operandi prosegue nel modo seguente:Evaluation of the operands proceeds as follows:

  • Se logical-OR-expression non è uguale a 0, expression viene valutato.If logical-OR-expression is not equal to 0, expression is evaluated. Il risultato della valutazione dell'espressione è dato da expression non terminale.The result of evaluating the expression is given by the nonterminal expression. Ciò significa che expression viene valutato solo se logical-OR-expression è true.(This means expression is evaluated only if logical-OR-expression is true.)

  • Se logical-OR-expression è uguale a 0, conditional-expression viene valutato.If logical-OR-expression equals 0, conditional-expression is evaluated. Il risultato dell'espressione è il valore di conditional-expression.The result of the expression is the value of conditional-expression. Ciò significa che conditional-expression viene valutato solo se logical-OR-expression è false.(This means conditional-expression is evaluated only if logical-OR-expression is false.)

    Si noti che viene valutato expression o conditional-expression, ma non entrambi.Note that either expression or conditional-expression is evaluated, but not both.

    Il tipo del risultato di un'operazione condizionale dipende dal tipo dell'operando expression o conditional-expression come segue:The type of the result of a conditional operation depends on the type of the expression or conditional-expression operand, as follows:

  • Se expression o conditional-expression è di tipo integrale o a virgola mobile (i tipi possono essere diversi), l'operatore esegue le conversioni aritmetiche comuni.If expression or conditional-expression has integral or floating type (their types can be different), the operator performs the usual arithmetic conversions. Il tipo del risultato è il tipo degli operandi in seguito alla conversione.The type of the result is the type of the operands after conversion.

  • Se expression e conditional-expression hanno lo stesso tipo struttura, unione o puntatore, il tipo del risultato è lo stesso tipo struttura, unione o puntatore.If both expression and conditional-expression have the same structure, union, or pointer type, the type of the result is the same structure, union, or pointer type.

  • Se entrambi gli operandi possiedono il tipo void, il risultato è di tipo void.If both operands have type void, the result has type void.

  • 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 a void e il risultato è un puntatore a void.If either operand is a pointer to an object of any type, and the other operand is a pointer to void, the pointer to the object is converted to a pointer to void and the result is a pointer to void.

  • Se expression o conditional-expression è un puntatore e l'altro operando è un'espressione costante con valore 0, il tipo del risultato è il tipo puntatore.If either expression or conditional-expression is a pointer and the other operand is a constant expression with the value 0, the type of the result is the pointer type.

    Nel confronto dei tipi tra i puntatori qualsiasi qualificatore di tipo (const o volatile) nel tipo a cui punta il puntatore non è significativo, ma il tipo del risultato eredita i qualificatori da entrambi i componenti dell'espressione condizionale.In the type comparison for pointers, any type qualifiers (const or volatile) in the type to which the pointer points are insignificant, but the result type inherits the qualifiers from both components of the conditional.

EsempiExamples

Negli esempi seguenti vengono illustrati gli utilizzi dell'operatore condizionale.The following examples show uses of the conditional operator:

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

In questo esempio viene assegnato il valore assoluto i a j.This example assigns the absolute value of i to j. Se i è minore di 0, -i è assegnato a j.If i is less than 0, -i is assigned to j. Se i è maggiore o uguale a 0, i è assegnato a j.If i is greater than or equal to 0, i is assigned to 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.In this example, two functions, f1 and f2, and two variables, x and y, are declared. Più avanti nel programma, se le due variabili presentano lo stesso valore, viene chiamata la funzione f1.Later in the program, if the two variables have the same value, the function f1 is called. In caso contrario, viene chiamato f2.Otherwise, f2 is called.

Vedere ancheSee Also

Operatore condizionale: ? :Conditional Operator: ? :