Operador de expressão condicional
C tem um operador Ternário: o operador condicional-expression (? :).
Sintaxe
expressão condicional:
expressão lógica ORexpressão lógica OR ? expressão : - expressão condicional
O expressão lógica OR deve ser do tipo integral, flutuante ou ponteiro.Ela é avaliada em termos de sua equivalência como 0.Um ponto de seqüência segue expressão lógica OR.Avaliação dos operandos continua da seguinte maneira:
Se expressão lógica OR não é igual a 0, expressão é avaliada.O resultado da avaliação da expressão é dado pela nonterminal expressão.(Isso significa expressão é avaliada somente se expressão lógica OR é verdadeiro.)
Se expressão lógica OR é igual a 0, - expressão condicional é avaliada.O resultado da expressão é o valor de - expressão condicional.(Isso significa - expressão condicional é avaliada somente se expressão lógica OR é false.)
Observe que tanto expressão ou - expressão condicional é avaliado, mas não ambos.
O tipo de resultado de uma operação condicional depende do tipo da expressão ou - expressão condicional operando, da seguinte maneira:
Se expressão ou - expressão condicional tem integral ou flutuante tipo (seus tipos podem ser diferentes), do operador realiza conversões aritméticas usuais.O tipo do resultado é o tipo dos operandos após a conversão.
Se ambos os expressão e - expressão condicional tem a mesma estrutura, união ou tipo de ponteiro, o tipo do resultado é o mesmo tipo de estrutura, união ou ponteiro.
Se ambos os operandos tem o tipo de void, o resultado tem o tipo de void.
Se qualquer operador for um ponteiro para um objeto de qualquer tipo e o outro operando é um ponteiro para void, o ponteiro para o objeto é convertido em um ponteiro para void e o resultado é um ponteiro para void.
Se qualquer um dos expressão ou - expressão condicional é um ponteiro e o outro operando é uma expressão constante com o valor 0, o tipo do resultado é o tipo de ponteiro.
Na comparação de tipo para ponteiros, qualquer tipo de qualificadores (const ou volatile) no tipo ao qual os pontos de ponteiro são insignificantes, mas o tipo de resultado herda os qualificadores de ambos os componentes do condicional.
Exemplos
Os exemplos a seguir mostram os usos do operador condicional:
j = ( i < 0 ) ? ( -i ) : ( i );
Este exemplo atribui o valor absoluto de i para j.Se i for menor que 0, -i é atribuída a j.Se i é maior que ou igual a 0, i é atribuída a j.
void f1( void );
void f2( void );
int x;
int y;
.
.
.
( x == y ) ? ( f1() ) : ( f2() );
Neste exemplo, duas funções, f1 e f2e duas variáveis, x e y, são declarados.Posterior no programa, as duas variáveis têm o mesmo valor, a função f1 é chamado.Caso contrário, f2 é chamado.