Autor Beitrag
Borlox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 191

Win XP
Delphi 6 Enterprise
BeitragVerfasst: Sa 08.11.03 00:04 
Hi Leute,

ich hab da mal eine Frage, weiß aber noch nicht genau wie ich mein Problem beschreiben soll(deshalb auch der komische Titel)!

Ich kann ja erstmal klein anfangen: Wenn ich eine IF-Verzweigung habe in meinem Quelltext und diese Verzweigung nicht zutrifft, wird dann nachher in der Exe trotzdem jede einzelne Zeile durchlaufen oder überspringt er das ganze????
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
if 1>10 then 
 Begin
  Punkt1;
  .
  .
  .
  Punkt22222;
 End;

Und wenn ich das ganze auch noch mit einer Procedure mache, durchläuft er diese dann auch noch jedesmal irgendwie komplett? Kann ich mit zwar nicht vorstellen, aber man weiß ja nie!
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
Begin
 if 2>20 then Procedure1;
End;

Procedure1;
 Begin
  Punkt1;
  .
  .
  .
  Punkt22222;
 End;

Ich hoffe irgendjemand versteht, was ich meine! Ich weiß leider nicht, wie ich es am Besten erklären soll!

THX
Borlox

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.
Alex
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28


D5 Epr
BeitragVerfasst: Sa 08.11.03 00:33 
Hi,

beim ersten Beispiel werden deine Punkte nur ausgeführt wenn i>10 ist wenn nicht dann gehts nach dem end; weiter beim zweiten ist es fast genau so wenn deine Bedingung erfüllt ist wird die Procedure aufgerufen die die Anweisungen ausführt

Gruß, Alex
Terra23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Sa 08.11.03 01:12 
... ich will ja nicht pingelig sein, aber die erste Prozedur wird nie durchlaufen, weil es sich nicht um ein I handelt, sondern um eine 1. Und 1 ist nie größer als 10.. :-) Sonst trifft aber deine Erklärung soweit zu, Alex.. :P

_________________
Hasta La Victoria Siempre
Alex
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28


D5 Epr
BeitragVerfasst: Sa 08.11.03 12:27 
da hast Du natürlich recht :lol: hab das überlesen
aber dann ist das doch eigentlich sinnlos wenn das nie zutrifft :shock:

Gruß, Alex
Borlox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 191

Win XP
Delphi 6 Enterprise
BeitragVerfasst: Sa 08.11.03 13:14 
Titel: Klar
Natürlich ist mir klar, dass die Bedingung niemals zutrifft, sollte auch so sein, nur so zum veraunschaulichen!

Wichitg ist mir eigentlich nur, ob in der Exe nachher wirklich jede Programmzeile durchlaufen wird oder ob er zum End springt! Denn wenn ich tausende Befehle dazwischen habe, dann macht sich das schon bemerkbar!

THX
JoelH
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Sa 08.11.03 13:32 
Titel: hmm,
nein. Dass wird nicht durchlaufen, der Befehlszeiger wird direkt hinter die Sache gesetzt. Egal welche Variante du verwendest. Ein Asemblerprogramm ist da etwas anders strukturiert. Proceduren sind nichts weiter wie unterprogramm die irgendwo liegen und angesprungen werden. Wenn sie klein sind werden sie wohl direkt aufgelöst und in den Code eingebaut dass spart den Sprung und den Rücksprung. Aebr da dein Unterprogrammteil eh nie erreicht wird ist es wurscht was du benuttz.

_________________
mfg. Joel
Nightmare_82
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 260



BeitragVerfasst: Do 13.11.03 13:27 
wenn du die Codeoptimierung anschaltest(oder vielleicht sogar ohne), sollte Delphi so intelligent sein, den kompletten Code mit der Abfrage, die nie zutrifft, wegzuoptimieren. Ich habe das nicht getestet, aber in Java und C++ ist das so und ich gehe mal stark davon aus, daß das in Delphi auch so ist.

das ist ganz praktisch für z.B. sowas:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
const boolean DEBUG  = false;

...
// so lange DEBUG false ist, wird der Code wegoptimiert
if DEBUG then
begin
//Hier kannst du alle Sachen machen, die nur im Debug-Modus kommen
end;


das ist oft ein bischen leichter zu handhaben als IFDEFS
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 13.11.03 13:39 
Das sehe ich ein bisschen anders. Solange du nur eine Bool-Bedingung prüfst, funktionieren IFDEFs genauso gut. Das Ergebnis ist auch das selbe. Nutzt du die Bedingung nicht, wird auch der Code ignoriert.
Nightmare_82
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 260



BeitragVerfasst: Do 13.11.03 13:57 
ich wollte damit auch nicht sagen, daß es besser ist sondern daß es eine Alternative ist.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Type TGameMode = (gmTest, gmPlay, gmLevelEdit);
const MODE : TGameMode = gmLevelEdit;

...
if MODE = gmPlay then
begin
end
else if MODE = gmLevelEdit then
begin
end


für sowas ists halt praktisch, bei Booleans geb ich dir Recht