Operador de expresión condicional
C tiene un operador ternario: el operador de expresión condicional ( ? :
).
Sintaxis
conditional-expression
:
logical-OR-expression
logical-OR-expression
?
expression
:
conditional-expression
El elemento logical-OR-expression
debe ser de tipo entero, flotante o puntero. Se evalúa en términos de su equivalencia a 0. Un punto de secuencia sigue a logical-OR-expression
. La evaluación de los operandos se produce de la manera siguiente:
Si
logical-OR-expression
no es igual a 0, se evalúaexpression
. El resultado de evaluar la expresión lo determina el elementoexpression
no terminal. (Esto significa queexpression
solo se evalúa silogical-OR-expression
es true).Si
logical-OR-expression
es igual a 0, se devuelveconditional-expression
. El resultado de la expresión es el valor deconditional-expression
. (Esto significa queconditional-expression
solo se evalúa silogical-OR-expression
es false).
El efecto es que se evalúa expression
o conditional-expression
, pero no ambos.
El tipo de resultado de una operación condicional depende del tipo del operando de expression
o conditional-expression
, de la manera siguiente:
Si
expression
oconditional-expression
es de 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
expression
yconditional-expression
tienen el mismo tipo de estructura, unión o puntero, el tipo del resultado es el mismo tipo de estructura, unión o puntero.Si ambos operandos son de tipo
void
, el resultado es de tipovoid
.Si el operando 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 avoid
y el resultado es un puntero avoid
.Si
expression
oconditional-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 punteros, cualquier calificador de tipo ( const
o volatile
) en el tipo al que señala el puntero es insignificante, pero el tipo del resultado hereda los calificadores de ambos componentes del operador condicional.
Ejemplos
En los ejemplos siguientes se muestran 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
. Si no, se llama a f2
.
Vea también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de