macht das sinn ? if ((sum = max)) {..}
-
Hi,
ich hab aus einem Teil des php_sourcecodes (string.c->similar_text()) diesen code und komm aber nicht auf den Sinn, ne Zuweisung ist doch immer wahr ?!, also warum ne If-Abfrage ??
int sum,max;
...
if ((sum = max)) {
...
}vielen vielen Dank für jede Antwort
bye
Christian
-
Es muss wohl
if (sum==max) { //wenn max gleich sum ist }heißen
-
"sum=max" liefert den übergebenen Wert zurück, damit du Zuweisungsketten (ala "a=b=c=...") aufbauen kannst - den kannst du ganz normal auf true/false testen.
Also entspricht der Code letztendlich:
sum=max if(sum)//oder: if(sum!=0) { //... }Wieviel Sinn das macht, mußt du selber entscheiden.
Edit: Aber ein Tipfehler ist wohl wahrscheinlicher

-
roughneck99 schrieb:
Hi,
ich hab aus einem Teil des php_sourcecodes (string.c->similar_text()) diesen code und komm aber nicht auf den Sinn, ne Zuweisung ist doch immer wahr ?!, also warum ne If-Abfrage ??
int sum,max;
...
if ((sum = max)) {
...
}vielen vielen Dank für jede Antwort
bye
Christiandie doppelten klammern deuten an, dass hier tatsächlich zuweisung gemeint ist (doppelte klammern verhindern bei gcc eine warnung, bei vc++ muss noch ein explizter test dazu) - dea ergebnis des ausdrucks:
a = b
ist a nach der zuweisung (auch wenn die veränderung der variable a selbst ein nebeneffekt ist) - obiger code ist folglich equivalent zu:sum = max; if ( sum ) { // ...dabei wird sum implizit in bool konvertiert, also:
sum = max; if ( sum != 0 ) { // ...
-
roughneck99 schrieb:
ne Zuweisung ist doch immer wahr ?!
Wurde zwar eigentlich schon beantwortet, aber ich sags nochmal explizit: Nein, eine Zuweisung ist nicht immer wahr. Sie hat den zugewiesenen Wert als Ergebnis, und der kann (nicht immer, das hängt vom Typ ab) in bool gewandelt werden. Für eingebaute Datentypen gilt: Numerische Nullen und Nullpointer werden in false umgewandelt, alles andere in true.
-
merci!. vielen Dank für die Antworten !