Speedfrage :)
-
ob du mit == != >= <= < > prüfst macht keinen Unterschied, wenn der Compiler NICHT optimiert, dann ergibt das jeweils ein cmp gefolgt von
je, jne, jnb, jna, ja oder jb.
Wenn er allerdings optimiert, kann er bei Prüfungen wie:
x != 0
das mit einem test x übersetzen, der glaube ich manchmal schneller ist.
Aber wie gesagt es lag eh ein Fehler im Testprog vor. Aber ich möchte dazu noch sagen, dass es Ratsam ist zwei verschiedene Programme zu schreiben, da sonst evntl. Caching oder div. Packagelimits, das Ergebnis verfälschen können.mfg
-bg-
-
@-bg-
ich würde gerne wissen wo steht das ";" ein befehl ist. wenn da so wäre dann müsste man doch nicht "printf("A");" schreiben sondern könnte einfach "printf("A")" schreiben. sonst würde man ja immer schreiben "printf("A")NOP" was keinen sinn macht.
meines wissens teilt ";" dem compiler einfach nur mit das ein befehl hier abgeschlossen wird, damit man auch mehere befehle in eine reihe schreiben kann, wie z.b.: "printf("A");printf("B");printf("C");"
also von einem befehl zu sprechen ist glaube ich falsch. ";" versursacht höchstens, das der compiler "NOP" erstellt, weil kein befehl davor steht bzw, weil KEIN befehl abgeschlossen wird. eben NoOperation vor dem ";"
-
bei printf("a"); ist das ; Teil des Befehls. Bei ; ist ; der Befehl selbst. Nicht jedes ; ist ein eigener Befehl. Sehr deutlich zu sehen bei printf(";;");
-
Jep, da muss man tatsächlich unterscheiden.
if Bedingung erfüllt ; else anderes
heisst in diesem Falle z.B.: if Bedingung erfüllt, dann leere Anweisung, also mache nichts.
Zumindest habe ich das so gelernt
Kernighan / Ritchie haben das auch so rausgestellt. Ich glaube, ; an sich ist im Ansi-Standard sogar explizit als Befehl aufgeführt.[ Dieser Beitrag wurde am 22.11.2002 um 15:49 Uhr von Casi666 editiert. ]
-
okok
ich interpretier es einfach anders, es ist aber in etwa das selbe!
für mich schließt bei
if (true)
printf("A");
else
printf("B");das ";" den befehl printf("A") ab
und bei
if (true)
;
else
printf("B");schließt das ";" eine leere anwesiung ab.
denn man kann ja genauso wenig
if (true)
printf("A) //ohne ";"
else
printf("B");schreiben
und genauso wenig
if (true)
//ohne ";"
else
printf("B");für mich ist ";" nur ein bestandteil eines befehls aber kein befehl selber. wenn das so wäre dann müsste das ";" beim compilieren in irgendwelche maschinenbefehle übersetzt werden. das tut der compiler aber nicht, egal bei welchem befehl.
ein 'MyFunc();' wird zu
call MyFunc
und nicht zu
call MyFunc
nopes ist eben nur eine anweisung für den compiler, die befehle abschliesst, aber kein befehl selber, kann aber auch sein das ich "befehl" falsch interpretiere.
ich hoffe ihr versteht diesen kleinen unterschied
-
Die Diskussion ist reichlich sinnlos. Man kann sich im Rahmen des Standards nicht darüber unterhalten, welcher Code wann generiert werden könnte ... es ist alles erlaubt, was die as-if-Regel nicht verletzt. Geht man also vom Stnadard weg, kann man nur noch darüber diskutieren, was existierende oder naheliegende Implementierungen machen. Gibt es eine, die für leere Anweisungen NOPs generiert? Sinnvoll oder gar naheliegend ist das mit Sicherheit nicht.