Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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-expressionno es igual a 0,expressionse evalúa. El resultado de evaluar la expresión lo da el no determinadoexpression. (Significaexpressionque solo se evalúa silogical-OR-expressiones true).Si
logical-OR-expressiones igual a 0,conditional-expressionse evalúa. El resultado de la expresión es el valor deconditional-expression. (Significaconditional-expressionque solo se evalúa silogical-OR-expressiones 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
expressionoconditional-expressiontiene 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-expressiontienen 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 tipovoid.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 avoidy el resultado es un puntero avoid.Si o
expressionconditional-expressiones 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 .