Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
C hat einen ternären Operator: den bedingten Ausdrucksoperator ( ? :
).
Syntax
conditional-expression
:
logical-OR-expression
logical-OR-expression
?
expression
:
conditional-expression
Der Ausdruck für logical-OR-expression
muss über Ganzzahl-, Gleitkomma- oder Zeigertypen verfügen. Er wird hinsichtlich seiner Übereinstimmung mit 0 ausgewertet. Ein Sequenzpunkt folgt dem Ausdruck für logical-OR-expression
. Die Auswertung der Operanden wird wie folgt ausgeführt:
Wenn
logical-OR-expression
ungleich 0 ist, wirdexpression
ausgewertet. Das Ergebnis der Auswertung des Ausdrucks wird durch den Nichtterminalexpression
angegeben. (Dies bedeutet, dassexpression
nur ausgewertet wird, wenn der Ausdruck fürlogical-OR-expression
„true“ ist.)Wenn
logical-OR-expression
gleich 0 ist, wirdconditional-expression
ausgewertet. Das Ergebnis des Ausdrucks ist der Wert vonconditional-expression
. (Dies bedeutet, dassconditional-expression
nur ausgewertet wird, wennlogical-OR-expression
„false“ ist.)
Der Effekt ist, dass entweder expression
oder conditional-expression
, aber nicht beides ausgewertet wird.
Der Typ des Ergebnisses einer bedingten Operation hängt wie folgt vom Typ des Operands expression
oder conditional-expression
ab:
Wenn
expression
oderconditional-expression
über einen Ganzzahl- oder Gleitkommatyp verfügt (ihre Typen können unterschiedlich sein), führt der Operator die üblichen arithmetischen Konvertierungen aus. Der Ergebnistyp ist der Typ der Operanden nach der Konvertierung.Wenn sowohl
expression
als auchconditional-expression
denselben Struktur-, Union- oder Zeigertyp aufweisen, ist der Typ des Ergebnisses derselbe Struktur-, Union- oder Zeigertyp.Wenn beide Operanden den Typ
void
haben, hat das Ergebnis den Typvoid
.Wenn einer der Operanden ein Zeiger auf ein Objekt eines beliebigen Typs und der andere Operand ein Zeiger auf
void
ist, wird der Zeiger auf das Objekt in einen Zeiger auf einenvoid
konvertiert, und das Ergebnis ist ein Zeiger aufvoid
.Wenn
expression
oderconditional-expression
ein Zeiger und der andere Operand ein konstanter Ausdruck mit dem Wert 0 ist, ist der Typ des Ergebnisses der Zeigertyp.
Im Typvergleich für Zeiger sind alle Typqualifizierer ( const
oder volatile
) in dem Typ, auf den der Zeiger weist, nicht signifikant. Der Ergebnistyp erbt jedoch die Qualifizierer von beiden Komponenten des bedingten Operators.
Beispiele
In den folgenden Beispielen werden verschiedene Verwendungen des bedingten Operators veranschaulicht:
j = ( i < 0 ) ? ( -i ) : ( i );
In diesem Beispiel wird der absolute Wert von i
dem Wert j
zugewiesen. Wenn i
kleiner als 0 ist, wird -i
dem Wert j
zugewiesen. Wenn i
größer oder gleich 0 ist, wird i
dem Wert j
zugewiesen.
void f1( void );
void f2( void );
int x;
int y;
.
.
.
( x == y ) ? ( f1() ) : ( f2() );
In diesem Beispiel werden die zwei Funktionen f1
und f2
sowie die zwei Variablen x
und y
deklariert. Wenn die zwei Variablen später im Programm den gleichen Wert haben, wird die f1
-Funktion aufgerufen. Andernfalls wird f2
aufgerufen.