AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Var, Out, Const Paramter - Stack Ansicht (Compiler-Umsetzung)
Thema durchsuchen
Ansicht
Themen-Optionen

Var, Out, Const Paramter - Stack Ansicht (Compiler-Umsetzung)

Ein Thema von NickelM · begonnen am 3. Jul 2012 · letzter Beitrag vom 3. Jul 2012
Antwort Antwort
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#1

Var, Out, Const Paramter - Stack Ansicht (Compiler-Umsetzung)

  Alt 3. Jul 2012, 08:12
Hallo zusammen,

Wie oben schon beschrieben geht es um die Wörtchen Var, Out und Const, die man vor einem Paramter setzen kann. Mich interessiert mal, was der Compiler aus diesen Paramter intern, also wenn man sozusagen den "Stack" anschauen würde, macht.
Ich meine damit, in welchen "Typ" bzw. in welcher Form legt der Compiler dies eigentlich dann ab.
Es interessiert mich deshalb, dass ich weis, wie man eine Delphi-Funktion, die in einer Dll ist, in einer anderen Sprache aufrufen müsste, bzw. wie ich dies übergeben muss.

Ein Beispiel:
Var: Ich weis das wenn man Var für einem Paramter schreibt, der Compiler das in einen Pointer umsetzt.
Eigentlich wird also ein Pointer übergeben und der Compiler dereferenziert dann diesen Pointer.
Zumindest scheint es mir so, wenn ich nämlich in C++ einen Pointer auf den Typ übergebe und einen Var Parameter habe, bekomm ich den eigentlichen Typ.

So das ist aber das einzige, was ich weis. Wie wird out und Const eigentlich umgesetzt?
Oder machen die am eigentlichen Typ keine änderung?

P.S. : Sorry wenn ich so dumm frage, aber ich wusste nicht wie ich danach googlen bzw. ob es eigentlich irgendwo steht bzw. erklärt wird

Gruß NickelM
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

AW: Var, Out, Const Paramter - Stack Ansicht (Compiler-Umsetzung)

  Alt 3. Jul 2012, 09:58
out wird genau gleich wie var behandelt;
nur dass der Compiler nicht merkert wenn die Variable vor Aufruf der Funktion uninitialisiert ist.

Bei const hängt es vom Datentyp ab, was der Compiler daraus macht.
Normalerweise wird er den Parameter wie eine Wertübergabe behandeln.
Bei Records und Mengen kann der Compiler sich aber auch für eine Übergabe per Zeiger entscheiden, da ja der Code in der Funktion keine Veränderungen am Parameter vornehmen darf.

Bei Daten, die einer Referenzzählung unterliegen (dynamische Arrays, Strings, Interfaces), hat die Übergabe per const den Vorteil dass die Übergabe schneller wird.
Andreas
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#3

AW: Var, Out, Const Paramter - Stack Ansicht (Compiler-Umsetzung)

  Alt 3. Jul 2012, 09:59
Var/Out/Const sind alles Pointer auf die Variable. Nur der Delphi-Compiler kann/könnte zusätzliche Überprüfungen machen und ggf. meckern:

VAR = Variable muss vorher initialisiert werden
OUT = Variable darf vorher nicht initialisiert werden
CONST = Variable in der Funktion kann nicht abgeändert werden

Wenn es erlaubt ist auch NULL/nil an die Funktion zu übergeben, dann solltes man direkt die Variable als Pointer uebergeben, d.h. Deklaration im Header als z.B. PInteger und Übergabe als @variablenname
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Var, Out, Const Paramter - Stack Ansicht (Compiler-Umsetzung)

  Alt 3. Jul 2012, 10:20
Gut, also wie sich das anhört sind dieses meistens Dinger, die im Einsatz z.b. bei einer Dll nicht wirklich Auswirkungen hat. Wenn man "Standardtypen" wie z.b. Integer, PAnsiChar kann man mit Var und out arbeiten. Const ist da, nach euren Statements relativ unnötig. Wenn man feststellen will, ob der Pointer <> nil ist, halt direkt Pointer nehmen. Aber das ist ja dan logisch
Arrays verwende ich sowieso nicht in Funktionen. Lieber Pointer und dan so hinterlegen, wie einen statischen Array und Länge angeben (so wie es die WinAPIs auch machen).

Danke euch für die Erklärung.

Gruß NickelM
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#5

AW: Var, Out, Const Paramter - Stack Ansicht (Compiler-Umsetzung)

  Alt 3. Jul 2012, 10:28
Verwende "Var" oder eben nix, um eine Prozedur in einer DLL zu exportieren. Denke auch an die Aufrufkonvention.
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:39 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