AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Function/Procedure -Deklaration ?!

Ein Thema von fauxx · begonnen am 19. Apr 2004 · letzter Beitrag vom 20. Apr 2004
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#11

Re: Function/Procedure -Deklaration ?!

  Alt 19. Apr 2004, 18:23
@fauxx

Zitat:
Das ist mir schon klar. Aber wenn man jetzt nicht will dass die übergebene Variable geändert wird schreibt man doch einfach kein var davor. Wieso benötigt mann dann nocht const.
ganz einfach, wenn du weder var noch const angibst, wird eine temporäre extravariable angelegt. wenn du var/const benutzt wird die variable die du als parameter übergeben hast benutzt.
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Function/Procedure -Deklaration ?!

  Alt 19. Apr 2004, 23:43
Eine Kombination von const und var macht keinen Sinn. Ich weiß noch nicht mal, ob das der Compiler überhaupt akzeptiert. Mir const sagst du ihm der Parameter wird in der Prozedur nicht veränder und mit var sagst du ihm wieder, er soll den Parameter verändern.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#13

Re: Function/Procedure -Deklaration ?!

  Alt 20. Apr 2004, 00:19
Das ist elementar. Sieh Dir das an (und ausprobieren !) :

Delphi-Quellcode:
procedure test (OHNE/CONST/VAR a : integer);
begin
  a := a + 1;
end;

procedure TForm1.Button1Click(Sender: TObject);
var b : integer;
begin
  b := 1;
  test (b);
  showmessage (IntToStr (b));
end;
Const bringt eine Konstante. Keine Änderung/Rückgabewert möglich. OHNE bringt in der Prozedur den Parameter unter, der innerhalb als Variable benutzt werden kann. Aber immer noch kein Rückgabewert. Nach außen nicht sichtbar. 8) VAR schließlich liefert den Wert auch zurück.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#14

Re: Function/Procedure -Deklaration ?!

  Alt 20. Apr 2004, 00:32
Stichworte wären auch by reference und by value. by refernece heißt, es wird eine Speicherstelle als Parameter übergeben. Wird in der Prozedur der Wert dieser Speicherstelle verändert, bleibt diese Änderung nach verlassen der Prozedur erhalten. Von "zurückgeben" kann man, wenn man es genau nimmt, nicht sprechen. by value bedeutet, dass eine Kopie des Wertes als Parameter an die Prozedur übergeben wird. Und wenn ich die Kopie ändere, hat dies logischerweise keinen Einfluss auf das Original.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#15

Re: Function/Procedure -Deklaration ?!

  Alt 20. Apr 2004, 00:41
soweit ist das in der Theorie schon richtig. Den Const Parameter habe ich noch nie gebraucht. Im Prinzip reicht Wert (OHNE) und VAR - Parameter. Den CONST kann man mit einer lokalen Variablen selber bauen, sofern der Wert (Input bzw.OHNE Parameter) direkt der lokalen Variablen zugewiesen wird. Der VAR - Prameter liefert den dann. Wie Luckie sagt, sieht das im Speicher dann eben so aus. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Function/Procedure -Deklaration ?!

  Alt 20. Apr 2004, 12:00
Zitat von Luckie:
Stichworte wären auch by reference und by value ...
Hab ich doch auch gesagt, was das mit der Speicheradresse angeht.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#17

Re: Function/Procedure -Deklaration ?!

  Alt 20. Apr 2004, 12:15
Aber du hast die damit verbundenen Begriffe nicht genannt, was ich noch mal nachholen wollte.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
sonic

Registriert seit: 14. Mär 2003
30 Beiträge
 
Delphi 2006 Professional
 
#18

Re: Function/Procedure -Deklaration ?!

  Alt 20. Apr 2004, 12:23
Hi Leute,

Soweit ich weiß, ist der Aufruf mit const schneller, da der Compiler nur den Wert übergibt, ohne die Möglichkeit diesen zu ändern. Er legt also auch keine temporäre Lokale Variable an...

Könnte man vielleicht ausmessen mit GetTickCount, und ein paar 1000 Routinenaufrufen...

Wenn jemand Lust und Zeit hat...

Mfg Mike.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Function/Procedure -Deklaration ?!

  Alt 20. Apr 2004, 12:33
Ob das merklich schneller ist bezweifle ich.

Auf jeden Fall benötigt es weniger Speicherplatz...
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#20

Re: Function/Procedure -Deklaration ?!

  Alt 20. Apr 2004, 12:36
Moin!

Zitat von Matze:
Auf jeden Fall benötigt es weniger Speicherplatz...
In wie fern denn das? Wenn du ein VAR hast, dann übergibt er nur einen Pointer, also 4 Byte. Wenn du einen Const hast, dann übergibt er die Parameter auf Stack direkt - dabei aber folgende Regeln:

1. Werte die eine Grösse < 4 Bytes haben, werden trotzdem als DWORD gepusht - wegen dem alignment
2. Werte die die grösser als 4 Bytes sind, werden als Zeiger übergeben (Referenz) und somit sind sie auch nur 4 Bytes gross.

Daher: Wie sollte das weniger Speicherplatz brauchen?

Ob nun Const oder Var - er muss so oder so bei einem Element mit einer Grösse > 4 Bytes einen Zeiger / Referenz auf dieses übergeben, somit ändert sich da nix dran.

MfG
Muetze1
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz