Operator wyrażenia warunkowego
Język C ma jeden operator trójargumentowy: operator wyrażenia warunkowego (? :).
Składnia
conditional-expression:
logical-OR-expressionlogical-OR expression ? expression : conditional-expression
logical-OR-expression musi mieć typ całkowity, zmiennoprzecinkowy lub wskaźnika.Jest szacowane pod względem jego równoważności do 0.Punkt sekwencji podąża za logical-OR-expression.Ocena operandów postępuje w następujący sposób:
Jeśli logical-OR-expression nie jest równe 0, expression jest wykonywane.Wynik oceny wyrażenia podaje symbol nieterminalny expression. (Oznacza to, że expression jest wykonywane tylko wtedy, gdy logical-OR-expression jest true.)
Jeśli logical-OR-expression jest równe 0, conditional-expression jest wykonywane.Wynikiem wyrażenia jest wartość conditional-expression. (Oznacza to, że conditional-expression jest wykonywane tylko wtedy, gdy logical-OR-expression jest false.)
Należy zauważyć, że expression lub conditional-expression jest wykonywane, ale nie oba.
Typ wyniku operacji warunkowej zależy od typu operandu expression lub conditional-expression, w następujący sposób:
Jeśli expression lub conditional-expression ma typ całkowity lub zmiennoprzecinkowy (ich typy mogą być różne), operator wykonuje zwykłe konwersje arytmetyczne.Typ wyniku jest typu operandów po konwersji.
Jeśli oba expression i conditional-expression mają ten sam typ struktury, zbioru lub wskaźnika, typ wyniku jest tego samego typu struktury, zbioru lub wskaźnika.
Jeśli oba operandy są typu void, wynikiem ma typ void.
Jeśli argument jest wskaźnikiem do obiektu dowolnego typu, a drugi operand jest wskaźnikiem do void, wskaźnik do obiektu jest konwertowany na wskaźnik do void, a wynik jest wskaźnikiem do void.
Jeśli expression lub conditional-expression jest wskaźnikiem i inny argument jest wyrażeniem stałym z wartością 0, typ wyniku jest typem wskaźnika.
W porównaniu typów wskaźników, dowolne kwalifikatory typu (const lub volatile) w typie, do którego wskaźnik wskazuje są nieistotne, ale typ wyniku dziedziczy kwalifikatory obu składników wyrażenia warunkowego.
Przykłady
Następujące przykłady pokazują sposób użycia operatora warunkowego:
j = ( i < 0 ) ? ( -i ) : ( i );
Ten przykład przypisuje wartość bezwzględną i do j.Jeśli i jest mniejsze od 0, -i jest przypisane do j.Jeśli i jest większe niż lub równe 0, i jest przypisane do j.
void f1( void );
void f2( void );
int x;
int y;
.
.
.
( x == y ) ? ( f1() ) : ( f2() );
W tym przykładzie dwie funkcje f1 oraz f2 i dwie zmienne x oraz y są deklarowane.Później w programie, jeśli dwie zmienne mają tę samą wartość, funkcja f1 jest wywoływana.W przeciwnym razie f2 jest wywoływana.