Einzelnen Beitrag anzeigen

frankg

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

Hat Delphi Probleme mit static Variablen?

  Alt 29. Okt 2003, 14:02
Hallo all!

Ich programmiere momentan mal wieder etwas durch die Gegend, und dabei ist mir folgendes aufgefallen: Kann es sein, dass Delphi Probleme damit hat, static Variablen auseinanderzuhalten? Zuerst mal worum geht es? Sprachen wie C++ unterstützen sogenannte static Variablen, das sind Variablen, die ihren Wert auch dann nicht verlieren, wenn die Funktion verlassen wird. Delphi bietet diese Variablen nicht direkt an, man kann aber ein ähnliches Verhalten erzeugen, indem man zuweisbare typisierte Konstanten verwendet (muss man für den Compiler explizit einschalten). Ich habe draufhin mal folgendes programmiert:

Delphi-Quellcode:
procedure Test1;
const
  TestStat : Boolean = TRUE;
begin
  if Bedingung1 then
    TestStat := TRUE
  else
    TestStat := FALSE;
end;

procedure Test2;
const
  TestStat : Boolean = TRUE;
begin
  if Bedingung2 then
    TestStat := TRUE
  else
    TestStat := FALSE;
end;
Die Idee hinter dieser Programmierung war, so etwas wie ein Statusflag für die Prozedur zu erzeugen. Der obige Versuch scheitert. TestStat, obwohl in beiden Prozeduren lokal definiert wird offensichtlich wie eine globale Variable verwendet. Ändert sich der Wert von TestStat in Test1, ändert sich der Wert von TestStat in Test2 auch und umgekehrt. Ich habe das auf den gleichen Namen zurückgeführt und daraufhin folgendes programmiert:

Delphi-Quellcode:
procedure Test1;
const
  TestStat1 : Boolean = TRUE;
begin
  if Bedingung1 then
    TestStat1 := TRUE
  else
    TestStat1 := FALSE;
end;

procedure Test2;
const
  TestStat2 : Boolean = TRUE;
begin
  if Bedingung2 then
    TestStat2 := TRUE
  else
    TestStat2 := FALSE;
end;
Das kuriose ist jetzt aber, dass trotz der unterschiedlichen Namen TestStat1 und TestStat2 gleich behandelt werden, d.h. ändert sich TestStat1, ändert sich TestStat2 auch automatisch. Hat von Euch schon jemand mal versucht so etwas zu programmieren? Ich weiss jetzt auch nicht, ob der Fehler bei mir oder bei Delphi liegt. Schon mal vielen Dank für (zahlreiche) Antworten.

Viele Grüsse

Frank
  Mit Zitat antworten Zitat