Aya hat folgendes geschrieben: |
Hi,
ich habe eben ewig lange an einem Problem gesucht bis ich gemerkt habe, das es ein Logikfehler in der Parameter reihenfolge war.. Delphi scheint Parameter von rechts nach links abzuarbeiten
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| function readChar(var S: String): Char; begin Result:=S[1]; Delete(S, 1, 1); end;
procedure DoShowMessage(C1, C2, C3: Char); begin ShowMessage(C1+C2+C3); end;
procedure TForm1.Button1Click(Sender: TObject); var S: String; begin S:='ABC'; DoShowMessage(readChar(S), readChar(S), readChar(S)); end; |
Aus dem String "ABC" wird hier jetzt ein "CBA", weil anscheinend das rechte readChar zuerst ausgeführt wird, dann das mittlere und zuletzt das linke.
Daher.. kann man da irgendwas gegen tun?
Ich würde nämlich ungern erst alles in lokale Variablen schreiben bevor ich es an die Procedur übergebe
Aya~ |
Hallo,
eine "Parameter-Reihenfolge" gibt es garnicht, zur Übergabe an ein Unterprogramm müssen alle Parameter vorliegen.
Sind das wiederum Funktionen, müssen sie vorher ausgewertet werden, die Reihenfolge dafür ist aber nirgends festgelegt. Noch schlimmer: ein parallel optimierender Compiler auf einer Maschine mit mehreren CPUs kann diese Aufgaben auf 3 CPUs verteilen, mit völlig unvorhersehbaren Ergebnissen. Auf zukünftigen Maschinen wird also keine solche Software mehr funktionieren.
Sich darauf zu verlassen, das etwas in einer bestimmten Reihenfolge abgearbeitet wird, wenn keine logische Notwendigkeit für die Reihenfolge besteht, ist eigentlich ein Programmierfehler. Was seriell passieren muss, muss man auch seriell programmieren (und hoffen, dass der Optimierer das auch respektiert).
Gruss Reinhard