Dieser Operator heißt auf Englisch "conditional operator", was ins deutsche übersetzt sowas wie "bedingter operator" oder so ähnlich heißt.
Die Syntax lautet wie folgt:
<bedingung> ? <ausdruck1> : <ausdruck2>
Wobei <bedingung> ein "zu bool konvertierbarer Ausdruck", also auf deutsch wahr oder falsch sein muss, und <ausdruck1> und <ausdruck2> ein Ausdruck sein müssen.
Was er tut:
Wenn <bedingung> wahr ist, gibt dieser Operator <ausdruck1> zurück, wenn die Bedingung falsch ist, gibt er <ausdruck2> zurück.
Beispiel:
Code: Alles auswählen
int seven_is_good = 0;
int var;
var = seven_is_good ? 7 : 3; /* var ist jetzt 3 */
seven_is_good = 1;
var = seven_is_good ? 7 : 3; /* var ist jetzt 7 */
Soweit die üblichen Anwendungsfälle.
Dein beispiel könnte man also so übersetzen:
Code: Alles auswählen
#include <stdio.h>
int main()
{
int b = 11;
int m = b>10 ? 7 : b > 5 ? 2 : 4;
int n;
if (b>10)
n = 7;
else
{
if (b > 5)
n = 2;
else
n = 4;
}
printf ("m ist %d\n", m);
printf ("n ist %d\n", m);
return 0;
}
Eine kleine Feinheit:
<ausdruck1> oder <ausdruck2> muss keineswegs eine einziger Ausdruck sein, du kannst auch ausdrücke mit dem "Komma-Operator" verknüpfen. Der Rückgabewert des Kommaoperators ist
der letzte Ausdruck.
Beispiel:
Code: Alles auswählen
#include <stdio.h>
int main()
{
int a=1, b, c;
c = 0 ? 2 : (a++, b = 33, 12);
printf ("a ist %d\n", a); /* a ist 2 */
printf ("b ist %d\n", b); /* b ist 33 */
printf ("c ist %d\n", c); /* c ist 12 */
return 0;
}
Zu beachten ist, das man den Komma operator in Klammern setzen muss, weil er eine niedrigere Precedence hat als der ?: operator.
Das sieht etwas verwirrend aus, ist es aber in Wirklichkeit gar nicht.
Erwähnt sein noch, dass es wegen der schlechten Lesbarkeit (und wegen des fehlenden "Bekanntheitsgrades") oft besser ist auf diesen Operator zu verzichten.
In diesem Sinne,
fröhliches conditional operating
mfg, fat-lobyte
Haters gonna hate, potatoes gonna potate.