Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - unterschied von inc(x,1); und x := x +1 ??


JoelH - Fr 07.11.03 14:55
Titel: unterschied von inc(x,1); und x := x +1 ??
Ich benutze eigentlich immer inc(x) um etwas zu incrementieren. Leider habe ich nun festgestellt dass die nicht immer geht. Bzw. ich hab es schon öfter bemerkt aber es hat mich nicht weiter berühert. Doch jetzt interessiert es, was ist der Unterschied ? Warum gibt es Fälle in denen inc(x,1); einen Fehler produziert und x := x +1; nicht ??


Anonymous - Fr 07.11.03 15:02

wie genau sieht der Fehler aus? Eigentlich ist der einzige Unterschied, dass inc schnelleren Code produziert


AndyB - Fr 07.11.03 15:03

Der Unterschied liegt in den properties. Inc ist als Prozedur deklariert die einen var Parameter erwartet. Ein Property kann man aber nicht als var übergeben. Deswegen macht hier Inc() nicht mit.
"x := x + 1" hingegen braucht keinen var Parameter, womit es keine Probleme mit Properties gibt.

Inc(x); und x:= x + 1 erzeugen genau denselben Maschinencode.


UC-Chewie - Fr 07.11.03 15:07

AndyB hat folgendes geschrieben:
Inc(x); und x:= x + 1 erzeugen genau denselben Maschinencode.


Wird dabei eigentlich ein ADD x,1 oder ein INC x erzeugt?


AndyB - Fr 07.11.03 15:27


Delphi-Quelltext
1:
2:
3:
i := 10;
i := i + 1;
Inc(i);

Wird zu

Delphi-Quelltext
1:
2:
3:
MOV EAX, 10
INC EAX
INC EAX


Anonymous - Fr 07.11.03 15:41

hmm... war das dann vielleicht mal früher so? Irgendwie hatte ich das nämlich so im Kopf.


Delete - Fr 07.11.03 15:47

Die Code Optimierung von Delphi erzeugt seit D5 identischen Maschinencode.


JoelH - Fr 07.11.03 16:15
Titel: hmm,
@obbschtkuche
ist zB. bei einer Listbox so.

@die andern
hehe Maschinencode ist derselbe aber inc(x); schreibt sich schneller ;)


AndyB - Fr 07.11.03 16:19
Titel: Re: hmm,
JoelH hat folgendes geschrieben:
aber inc(x); schreibt sich schneller ;)

Bei einer Einbuchstabigen Variable ist x := x + 1; fast geauso schnell geschrieben.


JoelH - Fr 07.11.03 16:21
Titel: hmm,
aber das original ist leider

Delphi-Quelltext
1:
lbx_nach.itemindex := lbx_nach.itemindex +1;                    


natürlich verwende ich dann Copy&Paste ;) Es geth eher ums Prinzip.