PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C/C++ - Variablensequenz für Compiler interessant?


Gast
2007-09-12, 09:19:36
Mahlzeit,

wenn ich mich richtig erinnere, kann ich mit Kommas Ausdrücke abtrennen deren Reihenfolge der Ausführung (mir) egal ist. Also sowas:

int a, b, c, d;
a=1, b=2, c=3, d=4;
Mir wurde dazu mal erzählt, daß der Compiler dann besser optimieren kann. Unabhängig dieses einfachen Beispiels, profitieren die aktuellen Compiler von sowas wirklich oder kann man sich das schenken? D.h. erkennen die, daß die einzelnen Ausdrücke keine Beziehung untereinander haben und die Reihenfolge sowieso egal ist? Und wird das erst bei komplexeren Ausdrücken interessant?

Trap
2007-09-12, 11:22:47
Offensichtlich unabhängige Befehle erkennen können alle nennenswerten Compiler.

Einen Unterschied könnte es nur machen wenn man Funktionen aufruft und der Compiler den Inhalt der Funktionen nicht kennt, aber dann weiß er auch nicht welche Reihenfolge am schnellsten ist.

Coda
2007-09-12, 15:48:31
Kann man sich schenken. Und nein, das ist nicht der Zweck des Komma-Operators.

Bietchiebatchie
2007-09-12, 17:26:17
Kann man sich schenken. Und nein, das ist nicht der Zweck des Komma-Operators.
Gibts eigentlich einen vernünftigen Grund den Komma-Operator zu benutzen? Mit vernünftig meine ich NICHT so crap wie:


int i;
int list[];
list[i++,2] = 123;

Coda
2007-09-12, 18:23:16
In einer for-Schleife isses manchmal ganz praktisch.

for(int i=0,j=20; i<20; ++i,--j)

Und nützlich überladen kann man ihn natürlich auch (Boost.Assignment):

vector<int> v;
v += 1,2,3,4,5,6,7,8,9;

Bietchiebatchie
2007-09-12, 20:03:05
beim deinem ersten Beispiel ist es wohl Geschmackssache "," zu verwenden (soll heißen: mir würde es besser gefallen, wenn ich j aus der schleifendeklaration rausziehe ;) )

beim zweiten bei dem konkreten Beispiel sehr nützlich. Aber nur weil die Intention/Semantik absolut klar ist; ansonsten kann man damit - wie so häufig bei operatoren-überladung ziemlichen bockmist machen.

btw Danke :)

Gast
2007-10-25, 15:32:56
können die verkommaten Operationen eigentlich vom Scheduler oder so unterbrochen werden, oder ist das atomar?

Neomi
2007-10-25, 16:14:14
Sie sind definitiv nicht atomar.

Gast
2007-10-25, 16:18:53
Wie ist das überhaupt definiert? :) Unterschieden die sich was Unterbrechbarkeit einfach nicht von normalem Code? Also Scheduler und Exceptions etc. kann alles dazwischen - bzw. eigentlich sind ja noch nichtmal einzelne Anweisungen atomar (i++) ... blöd :(

patermatrix
2007-10-25, 16:30:44
bzw. eigentlich sind ja noch nichtmal einzelne Anweisungen atomar (i++) ... blöd :(
Ich zitiere: (http://www.forum-3dcenter.org/vbulletin/showpost.php?p=5583037&postcount=2)
Und das kein Befehl Atomar ist.

micki@work
2007-10-26, 09:56:09
beim deinem ersten Beispiel ist es wohl Geschmackssache "," zu verwenden (soll heißen: mir würde es besser gefallen, wenn ich j aus der schleifendeklaration rausziehe ;) )
wenn es die gleiche bedeutung haben soll ist die alternative

{
int j=20;
for(int i=0; i<20; ++i,--j)
{
...
}
}
was aufgrund der moeglichkeit wie coda es schrieb ja eher ne geschmackslosigkeit ist ;)

Coda
2007-10-26, 13:42:40
bzw. eigentlich sind ja noch nichtmal einzelne Anweisungen atomar (i++) ... blöd :(
i++ sowieso nicht. Wenn dann wäre eher ++i atomar, was aber leider auch nicht zutrifft.