Autor Beitrag
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: So 08.10.06 15:39 
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

ausblenden 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~

_________________
Aya
I aim for my endless dreams and I know they will come true!
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Mo 09.10.06 00:44 
user profile iconAya 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

ausblenden 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