C/C++:Was Beduetet x?y:z

Ich habe jetzt endlich verstanden, warum ich manche Dinge machen kann, andere wieder nicht.


Hier nochmal für alle die es wie ich zu diesem Zeitpunkt noch nicht bemerkt haben:
X?Y:Z;
X=Bedingung, die wahr oder falsch sein kann
Y=Wert, oder Rückgabewert wenn die Bedingung zutrift
Z=Wert, oder Rückgabewert wenn die Bedingung nicht zutrifft.

Was mir bisher verschlossen blieb, ich muss für Y oder Z ein, oder mehr, Argument(e) einsetzen die einen Wert zurückliefern können.
Z.B. Y kann sein: 5, 5.0001, eine Funktion, eine Wertzuweisung.
Y kann nicht sein : eine Anweisung wie printf("Irgendwas"); //dies liefert keinen Wert.

Mehrere Argumente werden mir "," getrennt. Bsp, siehe oben.

Ich hoffe, das war jetzt verständlich!
 
(x>100)?break;

Gibt es eine Möglichkeit so etwas mit dieser Syntax zu beschreiben?
Und wie bilde ich Anweisungsblöcke?

Nein das ist nicht möglich. In dem obigen Ausdruck dürfen keine Anweisungen stehen, da
es sich bei der Syntax um ein funktionales Feature in C/C++ handelt.
Das heißt das in den beiden cases nur Werte stehen dürfen, das schließt Funktionen mit
Rückgabewerten mit ein. Aber da eine Anweisung wie "break" keinen Wert besitzt ist
es in der obigen Anweisung ungültig...

Das führt zu den Antworten deiner nächsten Fragen:
Es ist nicht möglich in so einen Ausdruck Blöcke zu definieren.
Und es muss immer ein alternativ(else) Zweig vorhanden sein da dieser Ausdruck einen
bestimmten Wert zurückliefern muss, deshalb kann der else Zweig nicht entfallen....

Gruß

RedWing
 
Zurück