Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bei der Deklaration einer Variable einen Wert definieren (https://www.delphipraxis.net/118439-bei-der-deklaration-einer-variable-einen-wert-definieren.html)

gammatester 8. Aug 2008 23:15

Re: Bei der Deklaration einer Variable einen Wert definieren
 
Zitat:

Zitat von Apollonius
Dass dieses Konstrukt bei lokalen Variablen und Felder nicht funktioniert, finde ich absolut richtig. Bei globalen Variablen und Konstanten wird der Startwert einfach in einem Abschnitt des PE-Formats angegeben. Bei lokalen Variablen geht das nicht, man muss erst die Variable auf dem Stack allozieren und dann noch einen Wert hineinschreiben, was auf das selbe wie die explizite Zuweisung hinausläuft. Die Initialisierungs-Syntax würde dies verwischen.

Ach das ist ja interessant:) Ich glaube, hier werden die ganze Zeit zwei Konzepte verwechselt bzw. vermischt.

Lokal vs. global hat vom Prinzip her nichts mit Lebensdauer, Initialisierung usw. zu tun. Es gibt ja auch lokale Konstanten und Funktionen? Soll das auch nicht mehr funktionieren? Lokal bedeutet, das eine Entität halt nur innerhalb einer Funktion sichtbar ist und nicht in der ganzen Unit bzw. im Programm.

Außerdem: wie eine lokale initialisierte Variable "alloziert" und "belegt" wird, sollte nicht in der Sprache festgelegt werden, das ist halt Implementation durch die Kompilerentwickler, und wird auch jetzt schon eifrig verwendet: siehe Schleifen-"Variable", die nicht auf dem Stack sondern in Registern sind; und diese Register können dekrementiert werden, obwohl die Variable inkrementiert wird.

Außerdem: Du hast wohl auch nichts dagegen, wenn bei Ansistrings oder Referenzcounted-Konstrukte "Die Initialisierungs-Syntax würde dies verwischen" würde.

Also versucht nicht den Leuten, die bestimmte Konstruktion verwenden wollen, diese auszureden, ihr müßt sie ja nicht verwenden.

Und das Pseudoargument, man muß nicht alles machen, was geht, fällt hier aus historischen Gründen auf den Urheber zurück, der "var =" benutzt.


Gruß Gammatester

himitsu 8. Aug 2008 23:26

Re: Bei der Deklaration einer Variable einen Wert definieren
 
schau dir alleine mal die Speicherbereiche an, also wo was abgelegt wird (des is wohl die am Einfachsten sichtare Auswirkung)
Delphi-Quellcode:
const
  A = 'xyz';
  {$WRITEABLECONST ON}
  X: String = 'abc';
  {$WRITEABLECONST OFF}
  Y: String = 'bcd';
var
  Z: String;
begin
  Z := 'cde';
  Caption := Format('%x %x %x %x', [Integer(@X[1]), Integer(@Y[1]), Integer(@Z[1]), Integer(@A[1])]);
WritableConsts sind in Wirklichkeit auch nur Varialen und reagieren (bis auf gewisse Unterschiede) auch genauso.

Vorallem im ASM-Bereich wirst'e schnell merken, daß es einen großen Unterschied zwischen Konstanten, änderbaren Konstanten und Variablen gibt ... also z.B. wo/wie der Wert einer Integers abgelegt wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:22 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz