Udostępnij za pośrednictwem


Operator wyrażenia warunkowego

Język C ma jeden operator trójargumentowy: operator wyrażenia warunkowego (? :).      

Składnia

  • conditional-expression:
    logical-OR-expression

    logical-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.

Zobacz też

Informacje

Operator warunkowy: ? :