Unbekannte Syntax
-
Hallo Leute,
ich portiere eine C++ Bibliothek (DirectSearch) nach Java und bin über eine Zeile gestoßen, die ich nicht verstehe (in standard header vec.h#389). Könnte sie jemand bitte in einzelne Oprtationen zerlegen?
absxi = (d__1 = (double) v_[ix], fabs(d__1));
Es sieht so aus, als würde man d__1 einen Wert zuweisen und diesen zugleich auch absxi zuordnen, aber was bedeutet die Klammerung und Komma??
-
bughunter schrieb:
aber was bedeutet die Klammerung und Komma??
siehe "komma-operator"
absxi = (d__1 = (double) v_[ix], fabs(d__1));
müßte dann wohl
d__1 = (double) v_[ix];
absxi = fabs(d__1);
sein.
-
Vielen Dank für den Tipp, Volkard!
-
Das ist also die C-Syntax für Tupelzuweisung.
-
bughunter schrieb:
ich portiere eine C++ Bibliothek (DirectSearch) nach Java und bin über eine Zeile gestoßen....
absxi = (d__1 = (double) v_[ix], fabs(d__1));
absolut krank. wer programmiert so?
-
eeek schrieb:
Das ist also die C-Syntax für Tupelzuweisung.
hatte ich zunächst auch gedacht, aber absxi ist nur ein double!
-
~fricky schrieb:
absolut krank. wer programmiert so?
The College of William and Mary:
http://www.cs.wm.edu/~va/software/Vectors/
-
BTW, Google ist affenschnell geworden. Gestern war diese Zeile nur unmittelbar im Code zu finden (auf der Urheber Seite). Heute ist dieser Thread schon indiziert...
Und wenn ich morgen nach "affenschnell" suche, ist auch dieser Text in der Ergebnismenge.
-
bughunter schrieb:
BTW, Google ist affenschnell geworden. Gestern war diese Zeile nur unmittelbar im Code zu finden (auf der Urheber Seite). Heute ist dieser Thread schon indiziert...
Und wenn ich morgen nach "affenschnell" suche, ist auch dieser Text in der Ergebnismenge.
Beiträge dieses Forums sind mitunter bereits nach 30 Minuten mittels Google zu finden.
-
~fricky schrieb:
absolut krank. wer programmiert so?
Das kommt davon, wenn Leute Code weiterverwenden, anpassen und hin- und herportieren, ohne überhaupt zu versuchen, ihn zu verstehen.
Die ursprüngliche Fassung (z.B. http://www.netlib.org/clapack/clapack.tgz, SRC/dlassq.c) war anscheinend
absxi = (d__1 = x[ix], abs(d__1));
wobei abs ein Macro ist und die Zeile eine Hand-Optimierung von
absxi = abs(x[ix]);
sein soll, und d__1 als Hilfsvariable absichtlich kein eigenes Zuweisungs-Statement verdienen sollte. So weit so gut.
Aber dann hat wohl jemand, dein keine Macros mag, stattdessen fabs eingesetzt, so dass der ganze Spaß komplett sinnlos ist.
-
ach so. na gut, in makros muss man ja manchmal seltsame tricks anwenden. ich nahm an, das hätte einer im 'normalen' c-code so programmiert.