Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
C tem um operador ternário: o operador de expressão condicional (? :).
Sintaxe
conditional-expression:
logical-OR-expression
logical-OR-expression
?
expression
:
conditional-expression
O logical-OR-expression deve ter integral, flutuante ou tipo ponteiro. É avaliado em termos da sua equivalência a 0. Segue-se logical-OR-expressionum ponto sequencial. A avaliação dos operandos prossegue da seguinte forma:
Se
logical-OR-expressionnão for igual a 0,expressioné avaliado. O resultado da avaliação da expressão é dado pelo não terminalexpression. (Significaexpressionque só é avaliado selogical-OR-expressionfor verdadeiro.)Se
logical-OR-expressionfor igual a 0,conditional-expressioné avaliado. O resultado da expressão é o valor deconditional-expression. (Significaconditional-expressionque só é avaliado selogical-OR-expressionfor falso.)
O efeito é, ou expressionconditional-expression é avaliado, mas não ambos.
O tipo do resultado de uma operação condicional depende do tipo do expressionconditional-expression ou operando, da seguinte forma:
Se
expressionouconditional-expressiontem tipo integral ou flutuante (seus tipos podem ser diferentes), o operador executa as conversões aritméticas usuais. O tipo do resultado é o tipo dos operandos após a conversão.Se ambos
expressiontiveremconditional-expressiona mesma estrutura, união ou tipo de ponteiro, o tipo do resultado será a mesma estrutura, união ou tipo de ponteiro.Se ambos os operandos tiverem type
void, o resultado terá typevoid.Se um operando for um ponteiro para um objeto de qualquer tipo, e o outro operando for um ponteiro para
void, o ponteiro para o objeto será convertido em um ponteiro paravoide o resultado será um ponteiro paravoid.Se um
expressionouconditional-expressioné 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 qualificador de tipo (const ou volatile) no tipo para o qual os ponteiros aponta são insignificantes, mas o tipo de resultado herda os qualificadores de ambos os componentes da condicional.
Exemplos
Os exemplos a seguir mostram usos do operador condicional:
j = ( i < 0 ) ? ( -i ) : ( i );
Este exemplo atribui o valor absoluto de i a j. Se i for inferior a 0, -i é atribuído a j. Se i for maior ou igual a 0, i é atribuído a j.
void f1( void );
void f2( void );
int x;
int y;
.
.
.
( x == y ) ? ( f1() ) : ( f2() );
Neste exemplo, duas funções, f1 e f2, e duas variáveis, x e y, são declaradas. Mais tarde no programa, se as duas variáveis tiverem o mesmo valor, a função f1 é chamada. Caso contrário, f2 é chamado.