Partilhar via


Operador de expressão condicional

O C tem um operador ternário: o operador de expressão condicional (? :).      

Sintaxe

  • conditional-expression:
    logical-OR-expression

    logical-OR expression ? expression : conditional-expression

A logical-OR-expression deve ter um tipo integral, de flutuação ou ponteiro. Ela é avaliada em termos de sua equivalência a 0. Um ponto de sequência vem após a logical-OR-expression. A avaliação dos operandos acontece da seguinte maneira:

  • Se a logical-OR-expression não for igual a 0, a expression será avaliada. O resultado da avaliação da expressão é determinado pela expression não terminal. (Isso significa que a expression é avaliada apenas se a logical-OR-expression for verdadeira.)

  • Se a logical-OR-expression for igual a 0, a conditional-expression será avaliada. O resultado da expressão será o valor da conditional-expression. (Isso significa que a conditional-expression é avaliada apenas se logical-OR-expression for falsa.)

Observe que apenas a expression ou conditional-expression é avaliada, mas não ambas.

O tipo de resultado de uma operação condicional depende do tipo do operando da expression ou conditional-expression, da seguinte maneira:

  • Se a expression ou conditional-expression tiver o tipo integral ou flutuante (seus tipos podem ser diferentes), o operador executa conversões aritméticas comuns. O tipo do resultado é o tipo dos operandos após conversão.

  • Se a expression e a conditional-expression tiverem a mesma estrutura, união ou tipo de ponteiro, o tipo de resultado é a mesma estrutura, união ou tipo de ponteiro.

  • Se ambos os operandos tiverem o tipo void, o resultado tem o tipo void.

  • Se qualquer 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 para void e o resultado será um ponteiro para void.

  • Se a expression ou conditional-expression for um ponteiro e o outro operando for uma expressão constante com o valor 0, o tipo de resultado será o tipo de ponteiro.

Na comparação do tipo para ponteiros, qualquer qualificador de tipo (const ou volatile) no tipo para o qual o ponteiro aponta é insignificante, mas o tipo de resultado herda os qualificadores de ambos os componentes da condicional.

Exemplos

Os exemplos a seguir mostram o uso do operador condicional:

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

Este exemplo atribui o valor absoluto de i a j. Se i for menor que 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. Posteriormente no programa, se as duas variáveis tiverem o mesmo valor, a função f1 será chamada. Caso contrário, f2 é chamada.

Consulte também

Referência

Operador condicional: ? :