AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Hat Delphi Probleme mit static Variablen?
Thema durchsuchen
Ansicht
Themen-Optionen

Hat Delphi Probleme mit static Variablen?

Ein Thema von frankg · begonnen am 29. Okt 2003 · letzter Beitrag vom 2. Nov 2003
Antwort Antwort
Seite 2 von 2     12   
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Hat Delphi Probleme mit static Variablen?

  Alt 29. Okt 2003, 17:41
Zitat von woki:
Wird bestritten...
Dein Zitat hab ich auch gefunden. Aber unter Typisierte Konstanten steht bei mir
Zitat von Delphi-Hilfe:
Im Standardstatus des Compilers ({$J+}) können typisierten Konstanten neue Werte zugewiesen werden. Sie entsprechen damit initialisierten Variablen.
Aber vielleicht hat sich das seit Delphi 4 ja schon wieder geändert .
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#12

Re: Hat Delphi Probleme mit static Variablen?

  Alt 29. Okt 2003, 18:47
Hi,
Zitat von franz77:
Delphi-Quellcode:
var
  Form1: TForm1; // ist nach aussen sichtbar

implementation
var
  Form1NurFuerUnit: TForm1; // ist nur innerhalb des implementationsteils
                            // der unit sichtbar
{$R *.DFM}

end.
Die Variable Form1NurFürunit ist natürlich nur noch nach unten bekannt.

Das ist da gleiche als wenn Du es gleich zwischen Prozeduren und Funktionen schreiben würdest:
Delphi-Quellcode:
procedure Blupp1;
begin
//
end;

var
  sMyVar: String;

procedure Blupp2;
begin
//
end;
Die Variable sMyVar ist nur noch da verfügbar, was danach kommt, also z.B. in der Prozedur Blupp2, aber nicht in Blupp1.
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#13

Re: Hat Delphi Probleme mit static Variablen?

  Alt 29. Okt 2003, 19:40
Zitat von SirThornberry:
seit wann nimmt man überhaupt "const" bei variablen?? "const" ist Konstant und "var" ist variabel. Da geht es doch schon theoretich nicht das man etwas constantes ändert...
Na ja, sollte man glauben, aber bei Delphi unterscheidet man tatsächlich zwischen echten und typisierten Konstanten

Zitat:
Aber vielleicht hat sich das seit Delphi 4 ja schon wieder geändert
So wird es dann wohl sein, denn bei Delphi 7

Zitat:
Typ Schalter
Syntax {$J+} oder {$J-}
{$WRITEABLECONST ON} oder {$WRITEABLECONST OFF}
Vorgabe (Kontrollfeld) {$J-}
{$WRITEABLECONST OFF}
Grüsse
Woki
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#14

Re: Hat Delphi Probleme mit static Variablen?

  Alt 29. Okt 2003, 20:35
wie jetzt, soll das heißen das man auch variablen die hinter "const" definiert wurden ändern kann??? hab das no gar ni probiert da ich das von C++ her nur so kenne das es nicht änderbar ist
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#15

Re: Hat Delphi Probleme mit static Variablen?

  Alt 29. Okt 2003, 23:19
Zitat von SirThornberry:
wie jetzt, soll das heißen das man auch variablen die hinter "const" definiert wurden ändern kann???
Auch wenn das ein sehr unglückliches Konsrukt ist, ja das geht, also

Dinge der Art

const Bezeichner = Wert sind echte Konstanten und nicht veränderbar.

Aber

const Bezeichner :Typ = Wert und unter Projekt|Optionen|Compiler sind zuweisbare typisierte Konstanten aktiviert, dann gehts, um Überraschungen zu vermeiden, sollte man hier aber genau wissen was man tut, und sicher sein, das man das wirklich braucht.

Grüsse
Woki
  Mit Zitat antworten Zitat
frankg

Registriert seit: 20. Mai 2003
Ort: Wetter
72 Beiträge
 
Delphi 7 Architect
 
#16

Re: Hat Delphi Probleme mit static Variablen?

  Alt 30. Okt 2003, 09:31
Zitat von woki:
Zitat:
Zuweisbare typisierte Konstanten Diese Option dient der Abwärtskompatibilität zu Delphi 1.0 unter Windows. Wenn sie aktiviert ist, unterstützt der Compiler Zuweisungen an typisierte Konstanten. Sie entspricht dem Schalter {$J}.
Ich nehme an, Du hättest gerne eine Variable, deren Lebensdauer die Lebensdauer des Programmes ist, deren Sichtbarkeit aber auf eine Funktion beschränkt ist. Diese zuweisbaren typisierten Konstanten sind da so eine Notlösung, aber bei Dingen, die nur wegen der Abwärtskompatibilität vorhanden sind, wäre ich grundsätzlich vorsichtig bei der Verwendung. Nur innerhalb der Unit sichtbare Variablen, wie oben beschrieben, sind dann da bei Delphi vielleicht doch der Weg der Wahl.

Grüsse
Woki
Hi Woki!

Ganz genau. Ich will eine gobale Variable mit Sichtbarkeit die auf eine Funktion beschränkt ist. Die soll im Prinzip den Status der Funktion wiederspiegeln. Aus Gründen des "least privilege" soll die Variable halt nur in der Funktion bekannt sein. Sicherlich könnte ich (als Notlösung) auch eine unit-globale Variable verwenden, mich wundert es aber trotztdem, dass das mit den typisierten Konstanten nicht so funktioniert, wie ich es programmiert habe.

Viele Grüsse

Frank
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#17

Re: Hat Delphi Probleme mit static Variablen?

  Alt 30. Okt 2003, 10:21
Hi Frank,

ich kann allerdings Dein Problem nicht reproduzieren, hab das mal mit Booleans und mit Integern probiert, und bei mir gibt es keine Prozedurübergreifende Beeinflussung.

Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
const hallo : integer =2;
      testbool :Boolean=true;
begin
  hallo := hallo+1;
  ShowMessage(inttostr(hallo));
  testbool := NOT testbool;
  showmessage(BoolToStr(testbool,true));
end;

procedure TForm1.Button6Click(Sender: TObject);
const hallo : integer =2;
      testbool :Boolean=true;
begin
  hallo := hallo+1;
  ShowMessage(inttostr(hallo));
  showmessage(BoolToStr(testbool,true));
end;
[edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit]
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#18

Re: Hat Delphi Probleme mit static Variablen?

  Alt 2. Nov 2003, 19:48
Hey Frank,

Delphi hat keine Probleme bei Namensgleichheit von Identifiern. Es gilt lediglich den Scope und Namespace (ab D7) korrekt zu verwenden. Du kannst mithilfe des Debuggers der Delphi-IDE leicht überprüfen, ob zwei (einfache) Variablen identisch sind, also den selben Speicherplatz einnehmen, indem Du ihre Adressen auf Gleichheit überprüfst. Der integrierte Debugger und die Watch List (Strg+Alt+W) eignen sich zur Laufzeit prima, wenn Du Ausdrücke der Art @myVar auswerten lässt (in der IDE Strg+F5).

In diesem Beispiel:
Delphi-Quellcode:
{$J+}
procedure StaticVar42;
const
  myVar : Integer = 42;
begin
  Inc(myVar);
end;

procedure StaticVar137;
const
  myVar : Integer = 137;
begin
  Inc(myVar);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Test42;
  Test137;
end;
ergibt der Ausdruck @myVar innerhalb von StaticVar42 zB den Wert @myVar:$44EBC0 und innerhalb von StaticVar127 den Wert @myVar:$44EBC4. Die beiden zuweisbaren Konstanten (assignable typed constants) nehmen also nicht den selben Speicherplaz ein und sind folglich nicht identisch.

Du kannst den integrierten Debugger nun mithilfe der ermittelten Adresse verwenden, um den Inhalt der beiden Variablen auch "von außerhalb" abzufragen, indem Du die Ausdrücke PInteger($44EBC0)^ bzw. PInteger($44EBC0)^ abfragst.

Tatsächlich handelt es sich bei zuweisbaren Konstanten immer (egal ob Methode, lokale Prozedur oder global) um Variablen im Datensegment, sie sind daher auch außerhalb der Prozedur/Methode gültig (Rückgabe von Pointern auf dieser Konstanten sind zulässig) und werden von allen Threads gemeinsam verwendet. Ein
static threadvar myVar = 123; oder
threadconst myVar = 123; gibt es leider nicht ;(

HTH
gruß, choose
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 18: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