Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Reihenfolge des Operators 'and'
[r2d2] - Mi 25.02.04 03:14
Titel: Reihenfolge des Operators 'and'
Hi
In der Delphi5-Hilfe steht zu 'and' und 'or':
Der Delphi-Compiler unterstützt zwei Auswertungsmodi für die Operatoren and und or: die vollständige Auswertung und das Kurzschlußverfahren. Bei der vollständigen Auswertung werden alle Operanden eines and - oder or-Ausdrucks auch dann ausgewertet, wenn das Resultat des gesamten Ausdrucks bereits feststeht. Das Kurzschlußverfahren geht streng von links nach rechts vor und wird beendet, sobald das Ergebnis des gesamten Ausdrucks feststeht.
So, und jetzt zu meinem Problem :arrow: :
Das bedeutet doch eigentlich, dass beim Kurzschlussverfahren das 'and' wie ein 'then if' wirkt. Jetzt habe ich mir gedacht, zur Optimierung eines meiner Programme ersetze ich einfach alle 'then ifs' durch 'ands'. Komischerweise ist der Effekt von Operation zu Operation aber total unterschiedlich: Anscheinend wird der Code bei Operationen, die am schnellsten in der vorgegebenen Reihenfolge ausgeführt werden, langsamer, bei den anderen schneller. Jetzt heißt es aber doch, dass das Kurzschlussverfahren "streng von links nach rechts" vorgeht :?: . Ich habe mir zum Überprüfen meiner Vermutung ein kleines Testprogramm geschrieben, in dem aber alles funktioniert wie es soll. Das Programm, in dem der Fehler auftritt, ist ziemlich komplex, kann es vielleicht damit zusammenhängen?
Danke schonmal
Chatfix - Mi 25.02.04 09:38
ist doch ganz einfach...
Kurzschlussverfahren:
Delphi-Quelltext
1:
| if True and False and True then |
Hier hört der Compiler nach dem ersten and auf, da der gesamte ausdruck bereits "False" ist.
Bei der Vollständigen auswertung wird aber bis zum letzten geprüft (obwohl schon feststeht das "False" rauskommt)
Hoffe das war einigermasen verständlich
in der Delphi Hilfe ist aber auch nen Bsp...
[r2d2] - Mi 25.02.04 13:31
Das ist mir schon klar, ich habe nur das Gefühl, dass der Compiler aus
Delphi-Quelltext
1:
| if bla and fgh and asd then |
gern mal
Delphi-Quelltext
1:
| if fgh and bla and asd then |
macht
Moderiert von
Peter Lustig: Code- durch Delphi-Tags ersetzt
Delete - Mi 25.02.04 19:01
Wenn 'fgh' eine Boolean-Variable ist aber 'bla' und 'asd' Funktionen, dann könnte ich mir schon denken, dass der Compiler zur Optimierung das am einfachsten auszuwertende nach vorne holt.
UC-Chewie - Mi 25.02.04 19:55
Kann ich mir nicht vorstellen. Der Delphi-Code-Optimiererer ist i.d.R. sehr zurückhaltend, wenn es darum geht, die Auswirkungen des Codes zu verändern.
Aber probieren geht über studieren: Wenn du mal eine entsprechenden Stelle hast, an der scheinbar die Reihenfolge der Bedimgungen vertauscht ist, schalte mal die Codeoptimierung ab und prüfe, ob das Problem immer noch auftritt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!