Hans Stefan schrieb:
> ucFCWrite = ((urFlow & UI_FLOW_MASK) ? X_TRUE : X_FALSE);>> ich verstehe eigentlich folgendes nicht:>> ? X_TRUE : X_FALSE);
Dann solltest du dir ein C-Buch zulegen.
Das ist der ternäre Vergleichsoperator
d = a ? b : c
ist gleichwertig zu
if( a )
d = b;
else
d = c;
das kann man auch so schreiben:
if(urFlow & UI_FLOW_MASK)
ucFCWrite = X_TRUE;
else
ucFCWrite = X_FALSE;
dh.: (Ausdruck) ? (wenn_wahr) : (wenn_falsch);
wenn der Ausdruck wahr ist, dann gilt das element vor dem Doppelpunkt,
wenn nicht, dann der nach dem Doppelpunkt...
Simon K. schrieb:
> Hoffe jetzt keinen Mist geschrieben zu haben.
Nein, hast du nicht.
Der wesentliche Unterschied zwischen den beiden Formen ist, dass es sich
bei ?: um einen echten Operator handelt, der in arithmetischen
Ausdrücken verwendet werden kann.
böse, böse, böse ...
ich mag sowas nicht. Vor allem wenn es in macros verwendet wird und
diese sich dann schachteln. nach 5 Fragezeichen im macro (preprozessor
output) sieht man überhaupt nicht mehr durch. Und solchen Code musste
ich mal auf fehler überprüfen.
Ist nett wenn es sehr einfach gehalten ist und sofort einsehbar, aber
if/else ist auch nicht soviel länger.
JL
>ucFCWrite = ((urFlow & UI_FLOW_MASK) ? X_TRUE : X_FALSE);>ich verstehe eigentlich folgendes nicht:>? X_TRUE : X_FALSE);>----------------------------------------------------------------->Das ist eine verkürzte Schreibweise für>if(urFlow & UI_FLOW_MASK)> X_TRUE;>else> X_FALSE;
if urFlow & UI_FLOW_MASK then
...
else
...
end if
Was liest sich angenehmer? Ein Compiler macht das gleiche draus!
das böse Basic!
<offtopic>
Jaja, geh du mit deinem Basic erstmal Array und Vektoren durch.
1
dim x, y
2
x = EineFunktion(3)
3
y = EinVektor(3) 'Na, was verwechselt sich besser?
Soviel zum pösen Basic.
Wer bei so simplen Sachen wie dem IF in C schon mit Basic und andren
vergleicht und meint, die anderen ließen sich leichter lesen... sorry,
der soll bitte wieder in den Kindergarten und die Finger vom
Programmieren lassen.