Compartir a través de


Operador de Conditional-Expression

C tiene un operador ternario: el operador de expresión condicional (? :).

Sintaxis

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

logical-OR-expression debe tener un tipo entero, flotante o de puntero. Se evalúa en términos de su equivalencia a 0. Un punto de secuencia sigue logical-OR-expressiona . La evaluación de los operandos continúa de la siguiente manera:

  • Si logical-OR-expression no es igual a 0, expression se evalúa. El resultado de evaluar la expresión lo da el no determinado expression. (Significa expression que solo se evalúa si logical-OR-expression es true).

  • Si logical-OR-expression es igual a 0, conditional-expression se evalúa. El resultado de la expresión es el valor de conditional-expression. (Significa conditional-expression que solo se evalúa si logical-OR-expression es false).

El efecto es, ya sea expression o conditional-expression se evalúa, pero no ambos.

El tipo del resultado de una operación condicional depende del tipo de operando expression o conditional-expression , como se indica a continuación:

  • Si expression o conditional-expression tiene un tipo entero o flotante (sus tipos pueden ser diferentes), el operador realiza las conversiones aritméticas habituales. El tipo del resultado es el tipo de los operandos después de la conversión.

  • Si y expressionconditional-expression tienen la misma estructura, unión o tipo de puntero, el tipo del resultado es la misma estructura, unión o tipo de puntero.

  • Si ambos operandos tienen el tipo void, el resultado tiene el tipo void.

  • Si cualquiera de los operandos es un puntero a un objeto de cualquier tipo y el otro operando es un puntero a void, el puntero al objeto se convierte en un puntero a void y el resultado es un puntero a void.

  • Si o expressionconditional-expression es un puntero y el otro operando es una expresión constante con el valor 0, el tipo del resultado es el tipo de puntero.

En la comparación de tipos para punteros, cualquier calificador de tipo (const o volatile) del tipo al que apunta el puntero es insignificante, pero el tipo de resultado hereda los calificadores de ambos componentes del condicional.

Ejemplos

En los ejemplos siguientes se muestran los usos del operador condicional:

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

En este ejemplo se asigna el valor absoluto de i a j. Si i es menor que 0, -i se asigna a j. Si i es mayor o igual que 0, i se asigna a j.

void f1( void );
void f2( void );
int x;
int y;
    .
    .
    .
( x == y ) ? ( f1() ) : ( f2() );

En este ejemplo, se declaran dos funciones, f1 y f2, y dos variables, x y y. Más adelante en el programa, si las dos variables tienen el mismo valor, se llama a la función f1 . De lo contrario, f2 se llama a .

Consulte también

Operador condicional: ? :